Python斐波那契系列

Rio*_*Rio 3 python

我用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)

Laf*_*los 6

在第一个中,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)