Приоритетность рекурсии и цикла 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 шт):

Автор решения: Harry
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, потом, если...

Так понятнее?

→ Ссылка