Burada bu kuyruk özyinelemeli işlevi var:
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))
Kadar çalışır n=997
, sadece kırılır ve tükürür a RecursionError: maximum recursion depth exceeded in comparison
. Bu sadece bir yığın taşması mı? Etrafında dolaşmanın bir yolu var mı?
line <n>, in <module>
yığın içinde eser miktarda) ve bu kod 2 yığın çerçeveleri alır n=1
(temel durum olduğu için n < 1
çok için, n=1
hala recurses). Ve sanırım özyineleme sınırı kapsayıcı değildir, çünkü "1000'e çarptığınızda hata" 1000 (1001) değerini aşarsanız "değil" hatası. 997 + 2
1000'den az olduğu için işe yarıyor 998 + 2
çünkü sınıra ulaşıyor.
recursive_function(997)
çalışır, kırılır 998
. Aradığınızda recursive_function(998)
999 yığın çerçeve kullanır ve yorumlayıcı tarafından 1 çerçeve eklenir (çünkü kodunuz her zaman üst düzey modülün parçasıymış gibi çalışır), bu da 1000 sınırına ulaşmasını sağlar.