← Все вопросы

Никак не пойму рекурсию. Объясните на факториале

Задан 7 месяцев назад637 просмотров2 ответа
16

Читаю про рекурсию третий день, в голове каша. Как функция может вызывать сама себя и не уйти в бесконечность? Желательно на примере факториала.

2 ответа

24

Рекурсия = база + шаг к базе.

def fact(n):
    if n <= 1:        # база: дальше не идём
        return 1
    return n * fact(n - 1)   # шаг: задача поменьше

fact(4) = 4fact(3) = ... = 4321. Каждый вызов уменьшает n, упирается в базу и «разворачивается» обратно. Без базы был бы бесконечный спуск (RecursionError).

Руслан Сагдиев «разворачивается обратно» — вот этого не хватало, спасибо! · 7 месяцев назад
Vitaliy Kovalenko можете ещё про Фибоначчи так же? · 7 месяцев назад
16

Мне помогло рисовать стек вызовов на бумаге: каждый вызов — коробочка, ждёт результат следующей. Дошёл до базы — коробочки закрываются снизу вверх.

Георгий Почапский + за совет с бумагой, реально помогает · 7 месяцев назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект