在Python中打印Fibonacci数字的逻辑

时间:2018-01-30 08:34:52

标签: python fibonacci

这一直在杀我。使用以下代码打印Fib编号时,它会给出正确的输出:

a = 0
n = 1
while n < 55:
    print(n)
    a,n = n,a+n

但是当我改为:

a = 0
n = 1
while n < 55:
    print(n)
    a = n
    n = a+n

输出完全不同。 我甚至通过pythontutor.com运行它来观察踩踏。

我缺少什么。

3 个答案:

答案 0 :(得分:1)

在两个代码片段之间解释和分配变量值的方式有所不同。

如果是第一个片段,在将值分配给&#34; n&#34;时,不使用a的新值,而是使用上一次迭代中的a值。

但是,在第二个片段的情况下,&#34; a&#34;的值首先更新,然后用于第二个声明。

让我们举个例子:

对于n为1的第一次迭代,

First Code Snippet :在迭代结束时,a的值将为1,n的值也将为1.(对于n = a + n,a的值被视为0)

第二代码片段:在迭代结束时,a的值将为1,n的值将为2.(对于n = a + n,a的值被视为1 )

关于Python逗号运算符需要注意的关键点是,在实际赋值之前,首先计算赋值运算符右边的所有表达式,这会导致两者之间输出的差异。

答案 1 :(得分:0)

嗯,初始作业

 old_a = a
 a = n
 n = old_a + n # saved a value (old_a) used 

装置

n = old_a + n

请注意a + n == 2 * n,而不是Resource Configurations

答案 2 :(得分:0)

让我们在第i次迭代时调用a_in_i an的值。 在第一个代码中,您将n_i+1分配给值a_i + n_i,而在第二个代码中,您将n_i+1分配给值a_i+n_i+n_i。 发生这种情况的原因是您在a之前在第二个代码中分配n,而这在第一个代码中同时发生。要解决此问题,请在临时变量中保存旧值na

或者,只需要一点数学运算,就可以在不保存任何临时变量的情况下执行以下操作:

a = 0
n = 1
while n < 55:
    print(n)
    n = a+n
    a = n-a

相当于:a_i+1 = n_i+1 - a_i = a_i + n_i - a_i = n_i