为什么斐波纳契序列上的两个程序没有给出类似的输出,但它们看起来很相似

时间:2017-03-06 16:35:36

标签: python fibonacci

# program to generate the Fibonacci sequence 
a, b=0,1
while b<10:
     Print b
     a, b=b,a+b

# my intuitive substitute 
a=0
b=1
while b<10
     print b
     a=b
     b=a+b

上面的代码片段包含两个程序,一个来自Python文档,另一个来自直观的我,我认为它们都会产生类似的结果,但前者输出1 1 2 3 5 8,后者1 2 4 8。善良的撒玛利亚人善意解释为什么?

2 个答案:

答案 0 :(得分:2)

本声明:

a, b=b,a+b

以及这些陈述:

a=b
b=a+b

不是一回事。前者在变量具有新值之前完成所有赋值。后者一次做一个。

因此,例如,从a = 0b = 1开始,逐步执行逻辑:

a, b=b,a+b
# a was set to 1
# and b was set to 0 + 1

反过来:

a=b
# a was set to 1
b=a+b
# b was set to 1 + 1

答案 1 :(得分:0)

在您的示例中,当您执行b = a+b时,您正在使用上一行中已修改的a。在Python的示例中,vars是同时分配的。你的工作应该是:

a=0
b=1
while b<10:
     print b
     c=a
     a=b
     b=c+b