Я изучаю питон из книги: «ThinkPython».Как работает эта рекурсивная функция в Python?
На странице 56 (Глава 6. Плодотворные функции) существует рекурсивная функция, которая вычисляет факториал любого числа. Это действительно работает, однако я не понимаю, почему. Это код:
def factorial(n):
if n == 0:
return 1
else:
recurse = factorial(n-1)
result = n * recurse
return result
Скажем, я пытаюсь с 3, я думаю, это то, что должно произойти:
- входит в функцию факториала и п = 3
- входит утверждение еще потому, что п не 0
- и здесь восходит к началу к шагу 1 при п = 2
так он должен сделать то же самое до n = 0
и возвращает 1
(он никогда не дойдет до последних строк).
«восходит к началу» может быть источником вашего недоразумения. Несколько экземпляров функции могут существовать в стеке вызовов одновременно, и каждый помнит свое место. Когда второй факториал завершается, он возвращается к первому факториальному вызову, который все еще находится в блоке 'else'. Это не похоже на цикл 'while' или' for', который возвращается в верхнюю строку. – Kevin
функция следует определению factorial (n): 'число n, умноженное на factorial (n-1)'. Тест должен остановить его на ноль (основание рекурсии). Много читать о [рекурсии] (https://en.wikipedia.org/wiki/Recursion_%28computer_science%29) вообще – Pynchia
Подсказка: вывести, что происходит с этим '1'? Используется ли она в любой операции? –