Ответ
Глубина рекурсии в Python ограничена размером стека вызовов (call stack). Превышение этого лимита вызывает исключение RecursionError
.
- Лимит по умолчанию: Обычно составляет около 1000 вызовов, но может варьироваться в зависимости от ОС и версии Python.
- Проверка и изменение: Управлять лимитом можно с помощью функций из модуля
sys
.
Пример работы с лимитом:
import sys
# Получить текущий лимит
current_limit = sys.getrecursionlimit()
print(f"Текущий лимит рекурсии: {current_limit}")
# Установить новый лимит
try:
sys.setrecursionlimit(2000)
print(f"Новый лимит рекурсии: {sys.getrecursionlimit()}")
except ValueError as e:
print(f"Не удалось установить лимит: {e}")
Важные моменты:
- Риск переполнения стека: Бесконтрольное увеличение лимита может привести к переполнению стека C и аварийному завершению работы интерпретатора Python.
- Отсутствие оптимизации хвостовой рекурсии: Python не выполняет оптимизацию хвостовых вызовов (Tail Call Optimization). Поэтому для задач, требующих большой глубины рекурсии, предпочтительнее использовать итеративные алгоритмы.