RecursionError: maximum recursion depth exceeded — как чинить?
Пишу рекурсивную функцию, и она падает с RecursionError: maximum recursion depth exceeded. Можно просто увеличить лимит и всё?
3 ответа
В 99% случаев у тебя нет (или не срабатывает) базовый случай — функция вызывает себя бесконечно. Питон обрывает на глубине ~1000, чтобы не упасть весь процесс.
Проверь, что есть условие выхода и что аргумент к нему движется:
def fact(n):
if n <= 1: # база — без неё бесконечность
return 1
return n * fact(n - 1) # n должно УБЫВАТЬ
Частые баги: забыл return перед рекурсивным вызовом, передаёшь тот же n (не уменьшаешь), база недостижима (например ждёшь ровно n == 0, а пришло отрицательное). Поднимать лимит через sys.setrecursionlimit() — крайняя мера, и при настоящей бесконечной рекурсии это просто отложит падение (а то и уронит интерпретатор).
Нет базового случая. Лимит поднимать не надо.
sys.setrecursionlimit(100000) и забудь.