← Все вопросы

RecursionError: maximum recursion depth exceeded — как чинить?

Задан 20 месяцев назад641 просмотров3 ответа
10

Пишу рекурсивную функцию, и она падает с RecursionError: maximum recursion depth exceeded. Можно просто увеличить лимит и всё?

3 ответа

21
✓ Принятый ответ — помог автору

В 99% случаев у тебя нет (или не срабатывает) базовый случай — функция вызывает себя бесконечно. Питон обрывает на глубине ~1000, чтобы не упасть весь процесс.

Проверь, что есть условие выхода и что аргумент к нему движется:

def fact(n):
    if n <= 1:        # база — без неё бесконечность
        return 1
    return n * fact(n - 1)   # n должно УБЫВАТЬ

Частые баги: забыл return перед рекурсивным вызовом, передаёшь тот же n (не уменьшаешь), база недостижима (например ждёшь ровно n == 0, а пришло отрицательное). Поднимать лимит через sys.setrecursionlimit() — крайняя мера, и при настоящей бесконечной рекурсии это просто отложит падение (а то и уронит интерпретатор).

Кристина Киселёва база была недостижима, спасибо! · 19 месяцев назад
8

Нет базового случая. Лимит поднимать не надо.

-5

sys.setrecursionlimit(100000) и забудь.

Яна Белова так бесконечную рекурсию это не лечит, упадёшь чуть позже или интерпретатор грохнешь · 19 месяцев назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект