代码之家  ›  专栏  ›  技术社区  ›  Shiv Kumar Ganesh

为什么程序不打印斐波那契数列?[副本]

  •  -1
  • Shiv Kumar Ganesh  · 技术社区  · 7 年前

    我已经编写了两个版本的程序,并且是python的新手。我无法理解打印斐波那契数列时出错的原因。第一个程序正确打印斐波那契级数,但第二个程序有问题。请告诉我怎么了。

    方案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 回复  |  直到 7 年前
        1
  •  3
  •   Grismar    7 年前

    诀窍在于:

    a, b = b, a+b
    

    这将指定 b a 并指定 a+b B ,但它以前是这样做的 A.

    您将此替换为:

    a = b
    b = a+b
    

    这就改变了 先且仅此 a+b B . 如果你想这样做,你可以:

    c = a+b
    a = b
    b = c
    

    或者类似的,但我认为最初的解决方案是更干净的,尽管显然不够直观,因为它难倒了你:)

        2
  •  0
  •   user10762593 user10762593    7 年前

    a, b = b, a+b 不一样 a = b; b = a+b . 特别是 a 不一样的时候 a+b 进行了评估。

        3
  •  0
  •   sam46    7 年前
    a = b
    b = a+b
    

    不一样

    a, b = b, a+b
    

    在第一版中: a 被毁 所以第二行相当于 b = b+b

    所以在每次迭代中,b被分配到2*b,因此序列1,2,4,8。。。