def f(n)Определяет рекурсивную функцию.
Рекурсивная функция содержит базовый случай и переход к меньшей задаче. Ответ собирается при обратном сворачивании стека.
Рекурсивная функция содержит базовый случай и переход к меньшей задаче. Ответ собирается при обратном сворачивании стека.
Рекурсия решает задачу через меньшую версию этой же задачи. Для корректности нужны база, уменьшающийся аргумент и понятное сворачивание результата.
База. Случай, который возвращает ответ без нового вызова.
Переход. Рекурсивный вызов с аргументом, приближающимся к базе.
Сворачивание. После базы значения возвращаются по стеку в обратном порядке.
Стоимость. Один рекурсивный вызов часто линейный; два ветвящихся могут дать экспоненциальное число вызовов.
Запусти короткую программу и переходи по строкам. Визуализатор показывает только код, текущую строку, переменные и вывод.
Рекурсивный факториал для n >= 0 имеет базу n <= 1 и переход n * factorial(n - 1). Если аргумент не уменьшается или база недостижима, Python завершит работу с RecursionError. Для повторяющихся ветвей, как в Fibonacci, используют мемоизацию: словарь сохраняет уже вычисленные значения и убирает повторную работу.
def f(n)Определяет рекурсивную функцию.
if base: returnБазовый случай останавливает ветвь рекурсии.
f(n - 1)Рекурсивный переход с уменьшающимся аргументом.
RecursionErrorИсключение при слишком глубокой рекурсии или недостижимой базе.
dict.get(key, default)В мемоизации читает сохранённый ответ или значение по умолчанию.
lru_cacheДекоратор functools для мемоизации; используй после понимания ручного состояния.
printПоказывает окончательно свёрнутый результат.
global callsРазрешает функции изменять имя уровня модуля; применяй только для учебной трассы побочного счётчика.
calls += 1Увеличивает счётчик вызовов на единицу.