在python中打印fibonacci序列的正确方法是什么

时间:2016-04-27 01:40:43

标签: python

def fibonacci(n):
 a = 0
 b = 1
 for i in range(n):
  a=b
  b=a+b
  print(a,end = " ")

fibonacci(10)

Result = 1 2 4 8 16 32 64 128 256 512

为什么我得到两个不同的结果?是什么让python打印2个不同的输出。目前我正在使用python 3

def fibonacci(n):
 a,b = 0,1
 for i in range(n):
  a,b=b,a+b
  print(a,end = " ")

fibonacci(10)

Result = 1 1 2 3 5 8 13 21 34 55

Why i am getting two different results ? what makes the python to print 2 different outputs.Currently i am using python 3.

4 个答案:

答案 0 :(得分:1)

区别在于你如何做总和:

a=b
b=a+b

a,b=b,a+b

第一个将a设置为b。因此,在计算a+b时,它实际上变为b+b2*b,这就是您看到倍增序列的原因。

第二种做总和的方法可以一次性更新所有内容。

答案 1 :(得分:0)

第一个你需要另一个变量作为中间变量。 在python中

a,b = b, a+b  is equal to 
c = b
b = a +b 
a = c 

答案 2 :(得分:0)

每次迭代都需要更新ab,如下所示:

new_a = old_b
new_b = old_a + old_b

但是在将新变量的值用作新迭代的值之前,必须注意不要重新分配旧迭代中的一个变量。例如:

a = b
b = a + b

这会正确更新a,但现在a的旧值不再可用,而b最终获得new_a + old_b,与old_b + old_b相同。所以它不起作用。同样,您无法在b之前更新a,因为b的旧值将不再可用。

一种解决方案是使用临时变量来保存a:

的旧值
t = a
a = b
b = t + b

您正在使用的另一个解决方案是同时更新这两个值:

a,b = b,a+b

首先在更改任何内容之前捕获ba+b的值。然后,它会将这些值分配给ab

答案 3 :(得分:0)

第一个总是尝试用b更新a,然后下一个使b为2b

第二个一次执行所有更新,因此您应该能够执行它。取而代之的是第一种方法,您可以按照以下方式进行操作

 for i in range(n):
  print(b)
  b=a+b
  a=b-a