斐波那契序列相乘

时间:2014-10-02 23:04:07

标签: list python-2.7 while-loop sequence fibonacci

我尝试使用以下代码制作斐波纳契序列:

def fibonacci(n): # write Fibonacci series up to n
    """Print a Fibonacci series up to n."""
    a = 0
    b = 1
    the_list = []
    while n > len(the_list):
        the_list.append(a)
    #By saying a = b and b = a+b we define the
    #fibonacci sequence, since this is how the
    #fibonacci sequence works.
        a = b
        b = a+b
    print the_list
# Now call the function we just defined:
fibonacci(10)

据我所知,这段代码应该这样做,但不是给我斐波那契序列,而是给出以下输出:

[0, 1, 2, 4, 8, 16, 32, 64, 128, 256]

所以我的斐波纳契序列正在成倍增加,而不是正确地工作。我不知道为什么,因为我想

a = b
b = a+b

应该做的伎俩,如果我看看我的while循环,这个循环的语句也是正确的,所以我只是不明白为什么我没有得到正确的输出。

因此,如果有人能解释我为什么这段代码不起作用,那么它将非常适合

1 个答案:

答案 0 :(得分:1)

由于存在逻辑缺陷,您的代码正在创建指数序列。根据您的代码:

Start:
a = 0
b = 1

1st iteration:
a = b = 1
b = a + 1 = 1 + 1 = 2

2nd iteration:
a = b = 2
b = a + 2 = 2 + 2 = 4

正如您所看到的那样,在执行a计算之前设置b会导致您的问题。

相反,你需要的东西(证明要点):

tmp = a
a = b
b = tmp + a

一点额外的数学将消除对额外变量的需求:

b += a
a = b - a

但最简单(也是最pythonic)的方式是:

a, b = b, a + b