私はこの末尾再帰関数をここに持っています:
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 + 21000未満なので998 + 2、制限に達したため、機能しません。
recursive_function(997)動作し、それはで壊れ998ます。呼び出すrecursive_function(998)と、999スタックフレームが使用され、インタープリターによって1フレームが追加されます(コードは常に最上位モジュールの一部であるかのように実行されるため)。これにより、1000の制限に達します。