У меня есть эта хвостовая рекурсивная функция здесь:
def recursive_function(n, sum):
if n < 1:
return sum
else:
return recursive_function(n-1, sum+n)
c = 998
print(recursive_function(c, 0))
Это работает до n=997
, тогда это просто ломается и выплевывает RecursionError: maximum recursion depth exceeded in comparison
. Это просто переполнение стека? Есть ли способ обойти это?
line <n>, in <module>
трассировки в стеке), и для этого кода требуется 2 кадра стека n=1
(потому что базовый случай есть n < 1
, поэтому n=1
он все еще рекурсивен). И я предполагаю, что предел рекурсии не является включающим, как в «ошибка, когда вы нажмете 1000», а не «ошибка, если вы превысите 1000 (1001)». 997 + 2
меньше 1000, поэтому работает 998 + 2
не потому, что достигает предела.
recursive_function(997)
работает, это ломает в 998
. Когда вы звоните, recursive_function(998)
он использует 999 стековых фреймов, и интерпретатор добавляет 1 фрейм (потому что ваш код всегда выполняется так, как если бы он был частью модуля верхнего уровня), что заставляет его достигать предела 1000.