首页 > 解决方案 > 斐波那契数列计算器似乎是正确的,但在网上找不到类似的代码。有什么不对?

问题描述

我为前 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

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

标签: pythonfibonacci

解决方案


不,那个代码很好。您在网上找不到类似代码的可能原因是在斐波那契中使用减法运算符并不常见,它是一个纯粹的加法函数,.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)

这样,右侧的所有内容都会在左侧的任何分配=之前进行评估。


推荐阅读