私はここで起こる処理を理解するための助けが必要です。fib(5)
私はフィボナッチ5が8であることを望んでいます。しかし、アルゴリズムを理解しようとする私の脳はそれを言いますない。フィボナッチシーケンスの再帰
return fib(4) + fib(3) // Stack frame 1
return fib(3) + fib(1) // Stack frame 2
は今、xは1 fib(1)
、最後に再帰を引き起こしif x == 0 or x == 1:
条件文です原因:これは私(誤って)はどのように考えるかです。私の論理によれば3 + 1 + 4 + 3になるでしょう。私の間違った論理を修正してください。ここで
def fib(x):
"""assumes x an int >= 0
returns Fibonacci of x"""
assert type(x) == int and x >= 0
if x == 0 or x == 1:
return 1
else:
return fib(x-1) + fib(x-2)
最初の呼び出しで用紙に書き留めて、関数の各再帰呼び出しを有効なreturn文で置き換えます。 おそらく理解していないことは、 'return fib(x-1)+ fib(x-2)'は、あなたのfib関数を2回呼び出すということです。**パラメータ** x = ** current ** xは、もう一方は2倍減った。また、関数の引数を最初に調べるときには、これが典型的な誤解であるため、おそらく関数の引数を再度調べるべきです。 –
あなたの関数にいくつかのprintステートメントを入れて、実行していることを確認するだけです。 – martineau