我需要帮助理解此处的处理过程,假设我调用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 fib(x - 1) + fib( x - 2)
会两次调用你的fib函数,一次使用参数x = 当前x减少一次,另一次减少两次。当使用函数时,这是一个典型的误解,因此您可能还应该再次查看函数参数。 - Jean-Marie Comets