私はこの末尾再帰関数をここに持っています:
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の制限に達します。