Статья Автор: Деникина Н.В., Деникин А.В.

Вопрос 16-2. Рекурсия (Python). Увеличиваем максимальную глубину рекурсии

Максимальная глубина рекурсии

Рекурсия в своей работе использует специальный участок памяти - стек, в котором хранятся все локальные переменные, адреса возврата и др. Когда количество вызовов функции становится слишком большим и стек не может больше вместить данных, происходит переполнение стека. В результате при выполнении программы мы можем увидеть сообщение об ошибке: RecursionError: maximum recursion depth exceeded in comparison

В Python есть ограничение на глубину рекурсии из-за максимальной глубины стека вызовов. По умолчанию это ограничение равно 1000 вызовам, то есть функция может вызывать саму себя не более 1000 раз, прежде чем будет сгенерировано исключение RecursionError.

Чтобы увеличить это ограничение, можно использовать модуль sys и метод setrecursionlimit(). Однако, стоит помнить, что изменение этого ограничения может привести к тому, что программа начнет потреблять больше памяти и увеличится время выполнения. 

 

Пример 3. Увеличиваем глубину рекурсии

Алгоритм вычисления функции F(n) задан следующими соотношениями:

F(n) = n при n > 5000
F(n) = 3 + F(n+1), если n ≤ 5000


Чему равно значение функции F(100) + F(90)

В данном примере нет вызовов функций с одинаковыми значениями, поэтому повторных вычислений не будет. Но самих вызовов будет очень много, так как нам необходимо дойти до базового случая, при котором n > 5000. Это больше 1000 вызовов. Для решения этой задачи необходимо увеличить глубину рекурсии. Можно увеличить до 5000 (можно сделать и больше, например, 1000000, но не забывайте, что чем больше значение мы установим, тем дольше будет выполняться программа). 
 
Программа для решения задачи

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать