python - 斐波那契数列计算器似乎是正确的,但无法在网上找到类似的代码。有什么不对?

标签 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

但我似乎无法在网上的任何地方找到类似的代码。我认为这是一个很大的危险信号。有人能告诉我这里出了什么问题吗?这是低效的代码吗?

最佳答案

不,该代码没问题。你在网上找不到类似代码的可能原因是在斐波那契中使用减法运算符是不常见的,它是一个纯加法函数,t<sub>n</sub> = t<sub>n-2</sub> + t<sub>n-1</sub> .

它当然有效,因为加法/减法既可交换又可结合,这意味着术语的顺序和分组并不重要:

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)

这样,= 右边的一切在左边的任何赋值之前计算。

关于python - 斐波那契数列计算器似乎是正确的,但无法在网上找到类似的代码。有什么不对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56050704/

相关文章:

python - CNN架构: classifying "good" and "bad" images

python - 递归计算斐波那契数列的计算效率最高的方法是什么?

algorithm - 斐波那契数列子例程返回一个太高的值

OCaml 创建斐波那契数列

python - 混合效应逻辑回归

python - 如何使用 Python 复制特殊文件,如管道或 block 设备?

python - 缺少趋势线

haskell - Haskell 斐波那契函数的良好风格

Python:模运算符的奇怪行为

python - 如何返回和传递数组?