Рекурсивная функция — это функция, которая вызывает саму себя во время своего выполнения, чтобы решить задачу, разбив её на меньшие, более простые подзадачи.
Безопасная рекурсивная функция требует двух необходимых частей:
Без базового случая функция будет вызывать саму себя бесконечно, вызывая ошибку stack overflow (переполнение стека).
def factorial(n):
if n == 0: # base case
return 1
return n * factorial(n - 1) # recursive case
Python устанавливает стандартный лимит рекурсии в 1000 для защиты от переполнения стека. Ты можешь проверить или изменить этот лимит с помощью модуля sys:
import sys
print(sys.getrecursionlimit()) # 1000 по умолчанию
sys.setrecursionlimit(2000) # увеличить при необходимости
Увеличивать этот лимит следует с осторожностью, так как чрезмерно глубокая рекурсия всё равно может привести к краху программы.
Рекурсия лучше всего подходит для задач с естественной иерархической или повторяющейся структурой, таких как:
Для кода, критичного по производительности, рассмотри использование итерации или мемоизации, чтобы избежать избыточных вызовов функций и снизить нагрузку на стек.
Рекурсивная функция должна содержать как базовый случай, так и рекурсивный случай, где базовый случай останавливает выполнение, а рекурсивный случай вызывает функцию с более простым входным значением.
Новый — ещё не проверен сообществом
Вы