为什么程序不打印斐波那契系列?

时间:2019-01-30 00:54:21

标签: python

我已经编写了该程序的两个版本和python的新版本。打印Fibonacci系列时,我无法理解出了什么问题。第一个程序正确打印了斐波那契数列,但是第二个程序有问题。请让我知道怎么了。

程序1

def fib(n):    # write Fibonacci series up to n
    """Print a Fibonacci series up to n."""
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()

# Now call the function we just defined:
fib(2000)

输出

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

程序2

# Let make a function that prints a Fibonacci 
def fib(n):    # write Fibonacci series up to n
    """Print a Fibonacci series up to n."""
    a = 0
    b = 1
    while a < n:
        print(a, end=" ")
        a = b
        b = a+b
fib(2000)

输出

0 1 2 4 8 16 32 64 128 256 512 1024 

3 个答案:

答案 0 :(得分:3)

诀窍在于:

a, b = b, a+b

这会将b的值分配给a,并将a+b的值分配给b,但是这样做是在a被分配新值之前值。

您将其替换为:

a = b
b = a+b

此操作首先更改a,然后才将a+b分配给b。如果您想这样做,可以这样做:

c = a+b
a = b
b = c

类似的东西,但是我认为原始的解决方案是更清洁的解决方案,尽管显然不够直观,因为它使您感到困惑:)

答案 1 :(得分:0)

a = b
b = a+b

不同
a, b = b, a+b

在第一个版本中: 当执行第一行时,a的旧值被破坏 所以第二行相当于b = b+b

所以在每次迭代中b都分配给2 * b,因此序列1,2,4,8 ...

答案 2 :(得分:0)

a, b = b, a+ba = b; b = a+b不同。特别是在评估aa+b的值是不相同的。