Tôi có chức năng đệ quy đuôi này ở đây:
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ó hoạt động đến n=997
, sau đó nó chỉ phá vỡ và phun ra a RecursionError: maximum recursion depth exceeded in comparison
. Đây có phải chỉ là một chồng tràn? Có cách nào để đi xung quanh nó?
line <n>, in <module>
dấu vết trong ngăn xếp) và mã này lấy 2 khung stack cho n=1
(vì trường hợp cơ sở là n < 1
vậy, vì vậy n=1
nó vẫn được lặp lại). Và tôi đoán giới hạn đệ quy là không bao gồm, vì trong đó là "lỗi khi bạn chạm 1000" không "lỗi nếu bạn vượt quá 1000 (1001)". 997 + 2
nhỏ hơn 1000 nên nó 998 + 2
không hoạt động vì nó đạt đến giới hạn.
recursive_function(997)
hoạt động, nó phá vỡ tại 998
. Khi bạn gọi recursive_function(998)
nó, sử dụng 999 khung xếp chồng và 1 khung được thêm bởi trình thông dịch (vì mã của bạn luôn chạy như thể nó là một phần của mô-đun cấp cao nhất), khiến nó đạt đến giới hạn 1000.