【问题标题】:Why don't the two programmes on Fibonacci sequence give similar output yet intuitively they seem similar为什么斐波那契数列上的两个程序没有给出相似的输出,但直观上它们看起来很相似
【发布时间】:2017-03-06 16:35:35
【问题描述】:
# 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

上面的 sn-p 包含两个程序,一个来自 Python 文档,另一个来自直觉我,我认为它们都会产生相似的结果,但前者输出 1 1 2 3 5 8 和后者 1 2 4 8。一个好心的撒玛利亚人能解释一下为什么吗?

【问题讨论】:

  • 请在此处发布代码。之后就可以链接了
  • 如果你指定a=b然后 b = a+b,那么你只是加倍了b。所以你已经做了一个加倍序列。但是,如果您同时更新 ab,则将 a 的旧值添加到 b,因此您得到一个斐波那契数列。

标签: python fibonacci


【解决方案1】:

此声明:

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

【讨论】:

    【解决方案2】:

    在您的示例中,当您执行b = a+b 时,您使用的是上一行中修改后的a。在 Python 的示例中,变量是同时分配的。为了您的工作,它应该是:

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

    【讨论】:

    • 为什么要使用额外的变量? b = a + b 后跟 a = b - a 不够吗?此外,您的 while 行上缺少一个冒号。
    • 没有发现错字。现在修好了。
    猜你喜欢
    • 2017-05-25
    • 2017-05-15
    • 2018-05-08
    • 2019-02-11
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多