我用Python编写了斐波纳契系列.无法弄清楚为什么第二个程序给出了错误答案,而第一个程序看起来是正确的.
以下程序给出正确的答案
def fib(n):
a,b=0,1
while b<n:
print b
a,b=b,a+b
fib(4)
1
1
2
3
Run Code Online (Sandbox Code Playgroud)
以下程序给出了错误答案:
def fib(n):
a = 0
b = 1
while b<n:
print b
a = b
b = a+b
fib(4)
1
2
Run Code Online (Sandbox Code Playgroud)
在第一个中,a, b = b, a+b同时进行分配.
在第二个,你是第一个做a = b,然后做b = a+b实际上只是b = 2*b.
如何在第二个中实现这种行为?使用临时值进行存储a.
def fib(n):
a = 0
b = 1
while b<n:
print b
temp = a
a = b
b = temp+b
fib(4)
>>>1
>>>1
>>>2
>>>3
Run Code Online (Sandbox Code Playgroud)