Приоритетность рекурсии и цикла for C++
Задача в том, чтобы разместить ферзей так, чтобы они друг друга не били. Вот есть псевдокод:
PlaceQueens(Q[1 .. n],r):
if r = n + 1
print Q[1 .. n]
else
for j = 1 to n
legal = True
for i = 1 to r - 1
if (Q[i] = j) or (Q[i] = j + r - i) or (Q[i] = j - r + i)
legal = False
if legal
Q[r] = j
PlaceQueens(Q[1 .. n],r + 1)
что будет выполняться первее: цикл for внешний или рекурсия? то есть очевидно, что когда мы ставим ферзя в первый ряд, мы можем поставить его на любую клетку в первом ряду, т к он всего один и бить его нечем. Но вот у нас есть внешний цикл for и рекурсия в конце. Так вот, в начале мы ставим ферзя на все позиции, на которых он может стоять, и уже потом разбираемся с каждой ситуацией, или же как только мы нашли позицию, на которой может стоять ферзь, запускаем рекурсию? И если второй вариант, то как мы потом по итогу снова возвращаемся к внешнему циклу for, чтобы посмотреть все возможные варианты расстановки фигуры в определенном ряду? Заранее спасибо!
Ответы (1 шт):
1 for j = 1 to n
2 legal = True
3 for i = 1 to r - 1
4 if (Q[i] = j) or (Q[i] = j + r - i) or (Q[i] = j - r + i)
5 legal = False
6 if legal
7 Q[r] = j
8 PlaceQueens(Q[1 .. n],r + 1)
Выполнение: строка 1, для j==1 строка 2, потом цикл 3-5, потом, если legal равно True, строка 7 и строка 8 — вызов PlaceQueens(Q[1 .. n],r + 1). После возврата из вызова переход к циклу 1, теперь j==2, для него строка 2, потом цикл 3-5, потом, если...
Так понятнее?