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