我为前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
但是我似乎无法在线找到任何类似的代码。我认为那是一个很大的危险信号。有人可以告诉我这里有什么问题吗?这是效率低下的代码吗?
答案 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中的常用方法。