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