【问题标题】:Fibonacci sequence multiplying斐波那契数列乘法
【发布时间】:2014-11-28 00:59:30
【问题描述】:

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

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 循环,这个循环的语句也是正确的,所以我只是不明白为什么我没有得到正确的输出。

因此,如果有人可以解释为什么这段代码不起作用,那将是高度赞赏

【问题讨论】:

  • 想想每次迭代发生了什么。 a 被分配b 的值,然后b 被设置为a + b。从b=1的迭代开始,首先设置a=1,然后设置b = a + b = 1 + 1 = 2

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


【解决方案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

如您所见,在执行 b 计算之前设置 a 会导致您的问题。

相反,您需要类似的东西(以证明这一点):

tmp = a
a = b
b = tmp + a

一点额外的数学运算将消除对额外变量的需要:

b += a
a = b - a

但最简单(也是最 Pythonic)的方法是:

a, b = b, a + b

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 2013-08-03
    • 2014-05-19
    • 2015-08-30
    相关资源
    最近更新 更多