斐波那契数列计算器似乎正确,但无法在线找到相似的代码。有什么不对?

时间:2019-05-09 00:39:52

标签: python fibonacci

我为前22个词做了一个简单的斐波那契数列计算器:

i=1
n=0
while i<=20000:
    i = i + n
    n = i - n
    print(i)

看起来结果正确

1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657

但是我似乎无法在线找到任何类似的代码。我认为那是一个很大的危险信号。有人可以告诉我这里有什么问题吗?这是效率低下的代码吗?

2 个答案:

答案 0 :(得分:8)

不,该代码很好。您可能无法在线找到类似代码的可能原因是,在斐波那契中使用减法运算符是很不寻常的,该运算符是纯加法函数tn = tn-2 + tn-1

它当然起作用,因为加减法既可交换又可关联,这意味着术语的顺序和分组并不重要:

i = i + n  # iNew = iOld + nOld

n = i - n  # nNew = (iNew)        - nOld
           #      = (iOld + nOld) - nOld
           #      = iOld + (nOld  - nOld)
           #      = iOld + (0)
           #      = iOld

使用减法可以绕过需要的第三个变量,这种语言在某种程度上要比Python少。

nextN = i + n
i = n
n = nextN

在Python中,实际上不需要 ,因为您可以使用元组分配,例如:

(n, i) = (i, n + i)

这样,=右侧的一切会在左侧的任何分配之前进行评估。

答案 1 :(得分:5)

这是一种不寻常的方式,但这是正确的。您的台词:

i = i + n
n = i - n

与执行操作相同:

new_i = i + n
n = i
i = new_i

i, n = i + n, i

这是Python中的常用方法。