Python Fibonacci序列的递归
我需要一些帮助来理解这里发生的处理过程,所以让我调用Python Fibonacci序列的递归,python,recursion,fibonacci,Python,Recursion,Fibonacci,我需要一些帮助来理解这里发生的处理过程,所以让我调用fib(5)我想要fibonacci 5,也就是8。但是我的大脑在试图理解算法时说它不是。我(错误地)是这样想的: return fib(4) + fib(3) // Stack frame 1 return fib(3) + fib(1) // Stack frame 2 现在,cause x是1fib(1),如果x==0或x==1,则条件语句将导致递归结束。按照我的逻辑会变成3+1+4+3。请纠正我错误的逻辑 def fib(x):
fib(5)
我想要fibonacci 5,也就是8。但是我的大脑在试图理解算法时说它不是。我(错误地)是这样想的:
return fib(4) + fib(3) // Stack frame 1
return fib(3) + fib(1) // Stack frame 2
现在,cause x是1fib(1)
,如果x==0或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)
下面是所发生事情的完整扩展:
fib(5) expands to fib(4)+fib(3)
fib(4) expands to fib(3)+fib(2)
fib(3) expands to fib(2)+fib(1)
fib(2) expands to fib(1)+fib(0)
fib(1) evaluates to 1
fib(0) evaluates to 1
fib(1) evaluates to 1
fib(2) expands to fib(1)+fib(0)
fib(1) evaluates to 1
fib(0) evaluates to 1
fib(3) expands to fib(2)+fib(1)
fib(2) expands to fib(1)+fib(0)
fib(1) evaluates to 1
fib(0) evaluates to 1
fib(1) evaluates to 1
如果你数一个,你会得到8作为答案。对于所有大于1的x
函数,fib
函数会自动调用两次:
fib(5)
变成fib(4)+fib(3)
并扩展到(fib(3)+fib(2))+(fib(2)+fib(1))
并扩展到((fib(2)+fib(1))+(fib(1)+fib(0))+((fib(1)+fib(0))+1)
扩展到((fib(1)+fib(0))+1)+(1+1))+((1+1)+1)
扩展到((1+1)+1)+(1+1))+((1+1)+1)
总共是8
只需在纸上写下第一个调用,并用有效的return语句替换函数的每个递归调用。您可能不理解的是返回fib(x-1)+fib(x-2)
调用两次fib函数,一个参数x=当前x递减一次,另一个递减两次。您可能还应该再次查看函数参数,因为在使用函数时(起初)这是一个典型的误解。只需在函数中放入一些print语句,然后运行它,看看它在做什么。