python - 斐波那契数列计算器似乎是正确的,但在网上找不到类似的代码。有什么不对?
问题描述
我为前 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
但我似乎在网上的任何地方都找不到类似的代码。我认为这是一个很大的危险信号。有人可以告诉我这里有什么问题吗?这是低效的代码吗?
解决方案
不,那个代码很好。您在网上找不到类似代码的可能原因是在斐波那契中使用减法运算符并不常见,它是一个纯粹的加法函数,.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)
这样,右侧的所有内容都会在左侧的任何分配=
之前进行评估。
推荐阅读
- file - Tcl 字符串到二进制文件的中间而不覆盖其内容
- html - 如何为图像添加图层?
- python - shutil.rmtree 不会删除所有文件和文件夹
- matplotlib - 使用 matplotlib 绘制 3D 向量场
- ssl - 在 Tomcat 上安装 SSL,其中 IIS 已在同一服务器上运行并配置了 SSL
- reactjs - 使用 react 和 redux 通过我的数据库获取值时出现错误
- project-reactor - project-reactor 中的 RxJava PublishSubject 等价于什么?
- c# - C# 软数字与输入的差异
- java - 检测矩阵中的相邻元素(SameGame)
- tensorflow - 在 Tensorflow 2.0 上使用给定模型获取梯度时遇到问题