python fibonacci - 有什么区别?

时间:2017-01-23 12:02:44

标签: python fibonacci

我正在学习python,我有一些问题:

之间有什么区别
a,b = 0,1
for x in range(100):
    print(a)
    a=b
    b=a+b

a,b = 0,1
for x in range(100):
    print(a)
    a,b = b, a+b

第一个给出了不好的结果,但为什么?

1 个答案:

答案 0 :(得分:1)

由于您首先设置a = b,因此新b的值将是旧版b的两倍。您提前覆盖a。正确的实现应该使用临时变量t

a,b = 0,1
for x in range(100):
print(a)
    t=a
    a=b
    b=t+b

这基本上就是通过使用序列分配来完成的。

在原始代码中,您有:

a,b = 0,1
for x in range(100):
    print(a)
    a=b # a now is the old b
    b=a+b # b is now twice the old a so b'=2*b instead of b'=a+b

因此,这会导致每次乘以两次跳跃(在1首次加载到a第一步之后)。

一个等价的问题是变量的交换。如果您希望a获取b的值,反之亦然,那么不能写:

#wrong swap
a = b
b = a

因为在第一次分配后您丢失了a的值。您可以使用临时t

t = a
a = b
b = t

或在Python中使用序列分配:

a,b = b,a

首先创建元组t = (b,a),然后将其分配给a,b