Python文档:
>>> def fib(n):
a,b=0,1
while a<n:
print a,
a,b=b,a+b
>>> fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
我的重新实现:
>>> def fib2(n):
a=0
b=1
while a<n:
print a
a=b
b=a+b
>>> fib2(2000)
0
1
2
4
8
16
32
64
128
256
512
1024
解决方法:
和…之间的不同
a,b=b,a+b
和
a=b
b=a+b
是在第二个中,为a分配b的值,然后为b分配a和b的总和,这意味着它是其原始值的两倍.
考虑:
a = 1
b = 2
a,b = b,a+b
这给
a==2 (old value of b)
b==3 (sum of 1 and 2)
相反:
a = 1
b = 2
a = b
b = a + b
这使:
a==2 (old value of b)
b==a+b==2+2==4 (twice the old value of b)