ここで行われる処理を理解するのに助けが必要なので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)