Как имитировать рекурсивный обратный вызов DFS с помощью итерации?

Я понимаю итеративный код DFS здесь. Однако мне кажется, что когда мы используем итерацию, мы можем имитировать только forward рекурсивные вызовы DFS, а не операторы return. Например, если я хочу вычислить N!, используя итерационную версию рекурсивного решения, мы не сможем этого добиться.

Я прав с этим выводом? Контрпример был бы весьма признателен.


person user3243499    schedule 07.09.2017    source источник


Ответы (1)


Я не понимаю, где вы запутались - что может быть результатом вашего замешательства. Итеративный родственник return не является явным; это другой процесс. Поток управления состоит в том, чтобы просто вернуться к началу цикла. Поток данных зависит от алгоритма: например, вы извлекаете элемент из стека или сохраняете результат в массиве.

Если «n-й факториал» — это математическое N! вычисления, итеративный возврат — это просто следующая итерация цикла с частичным произведением, хранящимся в локальной переменной:

# value of n is given
prod = 1

for i in range(n, 1, -1):
    prod *= i

# yield prod as result
person Prune    schedule 08.09.2017