我尝试使用以下代码制作斐波纳契序列:
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循环,这个循环的语句也是正确的,所以我只是不明白为什么我没有得到正确的输出。
因此,如果有人能解释我为什么这段代码不起作用,那么它将非常适合
答案 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