Когда прохожусь в VS по коду поэтотапно, то вижу следующую картину..., которая для меня вообще неясна: почему после выполнения условия остановки рекурсии
if (path.Count == pathLength+1)
программа перескакивает сначала в конец функции, а потом переходит четко на рекурсию, обходя даже цикл for, в который она вложена
Более детально:
Пытаюсь рекурсивно пройтись по матрице смежности графа и найти пути длиной 2 (т.е. пути, которые проходят через 3 точки). В данном примере ищу пути, который стартуют из вершины графа под номером 3 (3я строчка матрицы).
Я считаю, что написанная мной функция, должна выдать мне путь 3-1-5, поскольку никакой проверки на остальные единицы в ряду я не писала. Но вместо этого функция после нахождения этого пути снова переходит к рекурсии.. не могу понять, почему так происходит. Подскажите, пожалуйста, почему?
Код:
namespace Lab4{
class Program
{
public static int v = 8;
public static int pathLength = 2;
public static List<int> path = new List<int>();
public static int[,] matrix = {
{ 0, 0, 0, 0, 1, 0, 0, 0 },
{ 1, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 1, 0 },
{ 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 1, 0 }
};
public static void recursion(int row)
{
if (path.Count == pathLength+1)
{
for (int k = 0; k < path.Count; k++)
{
Console.Write(path[k] + " ");
}
Console.ReadKey();
}
else
{
for (int j = 0; j < v; j++)
{
if (matrix[row,j] == 1)
{
path.Add(row+1);
recursion(j);
}
}
}
}
static void Main(string[] args) {
recursion(2);
Console.ReadLine();
}
}
}