我理解Fibonacci是如何工作的,只是这段代码让我发疯。我可能会错过
def fib1(n):
if n == 1 or n == 2:
return 1
return fib1(n-1) + fib1(n-2)
for i in range(1,10):
print(fib1(i))
output = 1 1 2 3 5 8 13 21 34
好的,所以从1开始它返回1然后2也返回1,但是然后3被发送到fib1(n-1)+(n-2)并且它返回2?,isnt(3-1)+( 3-2)== 3?我可能将其格式错误但请解释它是如何发生的
答案 0 :(得分:0)
所以它不像返回(3-1)+(3-2),它正在做一个recursive call,通过做fib1(3-1)+ fib1(3-2)来打电话给自己,这打破了下降为fib1(2)+ fib1(1),返回1 + 1
我们可以通过走过fib1(4)来解决这个问题:
fibl1(4) - > fibl(4-1)+ fibl(4-2)
fib1(4) - > fibl(3)+ fibl1(2)
fibl(4) - > (fibl(3-1)+ fibl(3-2))+ 1(2是基本情况所以它返回1)
fibl(4) - > (fibl(2)+ fibl(1))+ 1
fibl(4) - > (1 + 1)+ 1
fibl(4) - > 3