フィボナッチを計算する2 つの関数がfib1
あります。fib2
def fib1(n):
if n < 2:
return 1
else:
return fib1(n-1) + fib1(n-2)
def fib2(n):
def fib2h(s, c, n):
if n < 1:
return s
else:
return fib2h(c, s + c, n-1)
return fib2h(1, 1, n)
fib2
再帰制限を爆破するまで問題なく動作します。正しく理解すれば、Python は末尾再帰を最適化しません。それは私には問題ありません。
fib1
の値が非常に小さい場合でも、減速し始めて停止しますn
。なぜそれが起こっているのですか?遅くなる前に再帰制限に達しないのはなぜですか?