Python Glossary English

все Python 3Функциипонятие

Рекурсия

рекурсия

Функция вызывает себя. Требует базовый случай. Глубина по умолчанию ~1000 (sys.setrecursionlimit).

Синтаксис

def f(n):
    if n == 0: return 1
    return n * f(n-1)

У Python нет оптимизации хвостовой рекурсии, поэтому превышение глубины даёт RecursionError, а не тихое зависание — для глубоких случаев надёжнее цикл. Если рекурсия перевычисляет одни и те же подзадачи (как наивный fib), оберни её в functools.lru_cache — сложность падает с экспоненциальной до линейной.

Примеры

def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n - 1)
print(factorial(5))  # → 120
def fib(n):
    if n <= 1:
        return n
    return fib(n-1) + fib(n-2)
print(fib(7))  # → 13
def sum_list(lst):
    if not lst:
        return 0
    return lst[0] + sum_list(lst[1:])
print(sum_list([1,2,3,4]))  # → 10
def power(base, exp):
    if exp == 0:
        return 1
    return base * power(base, exp-1)
print(power(2, 10))  # → 1024
import sys
print(sys.getrecursionlimit())  # → 1000
sys.setrecursionlimit(2000)
def count_down(n):
    if n <= 0:
        return
    print(n, end=' ')
    count_down(n-1)
count_down(5)  # → 5 4 3 2 1
def flatten(lst):
    result = []
    for item in lst:
        if isinstance(item, list):
            result.extend(flatten(item))
        else:
            result.append(item)
    return result
print(flatten([1,[2,[3]],4]))  # → [1,2,3,4]

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности