我正在尝试制作斐波那契序列我不知道为什么:
def fibonacci(n):
f1 = 0
f2 = 1
i = 1
while i < n:
print(f2)
f1 = f2
f2 = f1 + f2
i += 1
return f3
返回1,2,4,8,而这:
def fibonacci(n):
f1 = 0
f2 = 1
i = 1
while i < n:
print(f2)
f1, f2 = f2, f1 + f2
i += 1
return f3
返回Fibonacci序列。
答案 0 :(得分:4)
在后一个示例中,右侧评估 first :
f1, f2 = f2, f1 + f2
因此,f1
计算中使用的f2
的值是“old”值。
在您的代码中,当您这样做时:
f1 = f2
f2 = f1 + f2
当您评估f1
的新值时,f2
的值已经更改。
答案 1 :(得分:1)
在第一个示例中,在f1
更新之前,将丢弃上一次迭代中f2
的值。
f1, f2 = f2, f1 + f2
可以看作是
的简写tmp = f1
f1 = f2
f2 = tmp + f2
如果这有助于它更有意义。后者是您在许多其他语言中必须做的事情,以达到预期的效果。
答案 2 :(得分:0)
变量f1和f2 同时获得新值f2和f1 + f2,表达式
f1,f2 = f2,f1 + f2。
证明在进行任何赋值之前,首先评估右侧的表达式。 f1 + f2使用f1旧值,而我们不使用f1新值。右侧表达式从左到右求值。