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.
答案 0 :(得分:1)
区别在于你如何做总和:
a=b
b=a+b
与
a,b=b,a+b
第一个将a
设置为b
。因此,在计算a+b
时,它实际上变为b+b
或2*b
,这就是您看到倍增序列的原因。
第二种做总和的方法可以一次性更新所有内容。
答案 1 :(得分:0)
第一个你需要另一个变量作为中间变量。 在python中
a,b = b, a+b is equal to
c = b
b = a +b
a = c
答案 2 :(得分:0)
每次迭代都需要更新a
和b
,如下所示:
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
首先在更改任何内容之前捕获b
和a+b
的值。然后,它会将这些值分配给a
和b
。
答案 3 :(得分:0)
第一个总是尝试用b更新a,然后下一个使b为2b
第二个一次执行所有更新,因此您应该能够执行它。取而代之的是第一种方法,您可以按照以下方式进行操作
for i in range(n):
print(b)
b=a+b
a=b-a