Не могу понять, как функция зациклена без функции цикла в Python при поиске факториального числа - PullRequest
0 голосов
/ 22 сентября 2018
def factorial(num):
    if num == 0:
        return 1
    return num * factorial(num-1)

print('Enter an integer')
num = int(input())
print(factorial(num)

Если я ввожу число 4, вывод будет 24.

Внутри блока кода выше я не могу понять строку 4.

Хотя там нет никакогоцикл, как эта функция умножает все числа под данным номером и возвращает ожидаемое нами значение?

1 Ответ

0 голосов
/ 22 сентября 2018

Выполните это в своей голове.Например - что такое factorial(2)?2 не 0, поэтому 2 * factorial(1).Теперь, что такое factorial(1)?1 по-прежнему не 0, поэтому 1 * factorial(0).Что такое factorial(0)?Теперь 0 равно 0, поэтому мы знаем, что это 1. Теперь вернемся назад, чтобы включить недостающие фрагменты: если factorial(0) равно 1, то factorial(1) равно 1 * 1, тогда factorial(2) равно 2 * 1 * 1.

При рекурсии существует базовый (или завершающий) случай, который известен, а все остальные случаи сводятся к более простым задачам, приближающимся к базовому.Вы знаете factorial(24) только если вы знаете factorial(23), вы знаете factorial(23) только зная factorial(22) ... но вы знаете factorial(0) безоговорочно.Если завершающий регистр отсутствует, то вы получите эквивалент бесконечного цикла - бесконечной рекурсии.

Чтобы понять рекурсию, вы должны сначала понять рекурсию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...