Я изо всех сил пытаюсь понять вывод рекурсивной функции, которая вызывает себя дважды. Я понимаю, что функция с такой структурой вряд ли когда-либо понадобится на практике, но, поскольку я новичок в программировании, я подумал, что для меня было бы полезно немного лучше понять концепцию рекурсии. У меня также (я думаю) нет проблем с пониманием концепции рекурсии в более простом случае, т. Е. Факториала, секвенции Фибоначчи.
Я пробежал это через Python Tutor и попытался использовать отладчик, но ябоюсь, я до сих пор не совсем понимаю, что происходит за кадром.
Я также искал этот сайт, и хотя один или два человека задавали похожие вопросы, приведенные ответы не помогли в моем случае, например, Вызов рекурсивной функции дважды подряд
def recurse(n, s):
if n == 0:
print(s)
else:
recurse(n - 1, n + s)
recurse(n - 1, n + 2*s)
recurse(2, 0)
Вот что я думал:
recurse (2, 0)
- 2! = 0, поэтому перейдите к другому:
recurse (1,2)
- 1! = 0, поэтому перейдите к другому:
- recurse (0, 3)
- 0 == 0, поэтому выведите (3)
recurse (1, 2)
- 1! = 0, поэтому переходите к другому:
- recurse (0, 5)
- 0 == 0, поэтому выведите (5)
Таким образом, я ожидаю вывод 3, 5
, но вывод, который я получаю 3, 5, 3, 5
Выполняет ли второй вызов recurse
, затем вызывает первый? Я думал, что два последовательных рекурсивных оператора выполняются независимо, но, похоже, это не так.
Любая помощь, указывающая, что именно я не понимаю, будет очень признательна.