List 斐波那契数列乘法
我尝试用以下代码生成斐波那契序列:List 斐波那契数列乘法,list,python-2.7,while-loop,sequence,fibonacci,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 defi
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循环,这个循环的语句也是正确的,所以我不明白为什么我得不到正确的输出
因此,如果有人能解释为什么这段代码不起作用,我会非常感激你的代码因为逻辑缺陷而创建了一个指数序列。根据您的代码:
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
会导致您的问题
相反,您需要(证明这一点):
额外的一点数学运算将消除对额外变量的需要:
b += a
a = b - a
但最简单(也是最具Python风格)的方法是:
a, b = b, a + b
思考每个迭代中发生的事情<代码>a被分配
b
的值,然后b
被设置为a
+b
。从b=1
的迭代开始,首先设置a=1
,然后设置b=a+b=1+1=2
。
a, b = b, a + b