【发布时间】:2017-12-05 17:59:14
【问题描述】:
我了解斐波那契的工作原理,只是这段代码让我发疯。我可能会出错
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?,不是 (3-1)+( 3-2) == 3?我可能格式错误,但请解释它是如何发生的
【问题讨论】:
-
不是
(2) + (1),而是fib(2) + fib(1)。fib(1)是什么?fib(2)是什么? -
不是
(n-1) + (n-2)。这是fib1(n-1) + fib1(n-2)。 -
这称为递归。但是,不幸的是,为了理解递归,你必须首先理解递归......
-
当
n==3,它不返回(3-1)+(3-2)它返回fib1(3-1) + fib1(3-2)==fib1(2) + fib1(1),即1+1 == 2