私は再帰の周りに頭を包み込み、質問があります。私のマシンでは、sys.getrecursionlimit()
は1000
となります。つまり、関数を再帰的に最大1000回呼び出すことができます。しかし、私は成功し、次のコードを実行することができるよ:システム再帰制限をバイパスしていますか?
def sum_badly(S, start, stop):
if start == stop:
return S[start]
else:
return sum_badly(S, start, (start+stop)//2) + sum_badly(S, (start+stop)//2 + 1, stop)
MAX = 100000
S = range(MAX)
print(sum_badly(S, 0, MAX-1))
は、これはほぼ瞬時に終了し、私に4999950000
の期待答えを与えます。しかし、私のプログラムはどのようにして1000
呼び出しの再帰制限をバイパスすることができますか?実際
なぜ1000を超える再帰呼び出しが行われていると思いますか? – user2357112
@ user2357112非常に興味深い質問! 1000をはるかに超える入力サイズの場合、 'return'の後の呼び出しの最初の半分は' 1000'呼び出しを消費しませんか? – dotslash
いいえ、それはなぜでしょうか? – user2357112