0
なぜPythonはLine 10ではRecursionErrorをスローしますが、13行目ではリジェクトしません。Python - RecursionErrorが一貫してスローされない
def fib(n, a = [0,1]):
if len(a) > n:
return a[n]
a.append(fib(n - 1, a) + fib(n - 2, a))
return a[n]
def main():
x = 998
print(fib(x)) # RecursionError
for i in range(1000):
print(fib(i)) # No Error
main()
関連していないが、それ[可変デフォルトの引数](HTTPに気を付ける:// FIB(998)を呼び出すとRecursionErrorをスローしないように、ここで
は、この機能を悪用する機能ですdocs.python-guide.org/en/latest/writing/gotchas/)これは起こるのを待っているバグです。 –
@ juanpa.arrivillaga私はpythonがこれらを処理する方法を知らなかった、ありがとう! –
整数を昇順にループすると、 'fib()'の各呼び出しは、それらの2つの低い値がすでにキャッシュに入っているため、1レベル深くしか再帰しません。あなたが行くことができる高さには本当に制限はありません。しかし、大量の 'fib()'を開始するように頼むと、0と1に至るまで再帰します。 – jasonharper