Saya memiliki fungsi rekursif ekor ini di sini:
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))
Ia bekerja hingga n=997
, lalu rusak dan dimuntahkan a RecursionError: maximum recursion depth exceeded in comparison
. Apakah ini hanya stack overflow? Apakah ada cara untuk menyiasatinya?
line <n>, in <module>
in stack traces) dan kode ini membutuhkan 2 frame stack n=1
(karena case dasarnya n < 1
, jadi untuk n=1
itu masih berulang). Dan saya kira batas rekursi tidak inklusif, seperti "kesalahan ketika Anda menekan 1000" tidak "kesalahan jika Anda melebihi 1000 (1001)". 997 + 2
kurang dari 1000 sehingga tidak berfungsi 998 + 2
karena mencapai batas.
recursive_function(997)
berfungsi, rusak pada 998
. Ketika Anda menyebutnya recursive_function(998)
menggunakan 999 frame stack dan 1 frame ditambahkan oleh juru bahasa (karena kode Anda selalu dijalankan seolah-olah itu bagian dari modul level atas), yang membuatnya mencapai batas 1000.