В Python существует ограничение на глубину рекурсии, которое может вызывать ошибку RecursionError. В этой статье мы рассмотрим способы увеличения этого лимита.

Содержание

Текущий лимит рекурсии

По умолчанию Python устанавливает максимальную глубину рекурсии:

  • Обычно 1000 вызовов для CPython
  • Может варьироваться в зависимости от реализации и версии Python

Как проверить текущий лимит

МетодКод
Использование sysimport sys; print(sys.getrecursionlimit())

Способы увеличения лимита рекурсии

Использование sys.setrecursionlimit()

  1. Импортируйте модуль sys
  2. Установите новое значение лимита
ПримерОписание
import sys
sys.setrecursionlimit(2000)
Увеличивает лимит до 2000 вызовов

Оптимизация кода

  • Преобразование рекурсивного алгоритма в итеративный
  • Использование мемоизации для уменьшения глубины рекурсии
  • Применение хвостовой рекурсии (хотя Python не оптимизирует ее автоматически)

Рекомендации по установке нового лимита

ПараметрРекомендация
Максимальное значениеНе более 10000-30000 для избежания переполнения стека
ПлатформаЗначение зависит от доступного размера стека в ОС

Альтернативные подходы

  • Итеративное решение: Перепишите алгоритм с использованием циклов
  • Генераторы: Используйте yield для управления потоком выполнения
  • Стек вручную: Реализуйте стек явно для эмуляции рекурсии

Пример замены рекурсии на итерацию

Рекурсивный вариантИтеративный вариант
def factorial(n):
return 1 if n == 0 else n * factorial(n-1)
def factorial(n):
result = 1
for i in range(1, n+1):
result *= i
return result

Ограничения и риски

  • Установка слишком высокого лимита может вызвать переполнение стека
  • Некоторые реализации Python могут игнорировать setrecursionlimit()
  • Увеличение лимита не решает проблему неэффективных рекурсивных алгоритмов

Перед увеличением лимита рекурсии рекомендуется рассмотреть возможность оптимизации алгоритма или его перевода на итеративную реализацию.

Другие статьи

Как уменьшить лимит по карте Сбербанка и прочее