У меня есть эта хвостовая рекурсивная функция здесь:
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.