代码永远运行,这不是应该的



我写了代码来写斐波那契数列,直到元素不超过40。但是当我运行它时,它什么也不显示并且永远运行。此外,当我运行它时,我的笔记本电脑的温度上升到 90 摄氏度,当我停止运行它时,温度会恢复正常。(我有硝基感。

这是代码:

x=0
while x <= 40:
m = [1, 2]
x = m[-1] + m[-2]
m.append(x)
print(m)

你需要声明

m = [1, 2]

。您的代码将计算出的x = 1+2添加到m- 然后重置m = [1,2]因此 x 再次计算为 1+2:

x=0
while x <= 40:      # x is 0, then 3 ... again and again
m = [1, 2]           # m = [1,2] ... again and again
x = m[-1] + m[-2]    # x = 3     ... again and again     
m.append(x)          # m = [1,2,3]
print(m)  # never hit

修复:

x=0
m = [1, 2]
while x <= 40:
x = m[-1] + m[-2]
m.append(x)
print(m)

更高效的实现以获得第 n 个斐波那契:斐波那契数列的高效 Python 生成器

您每次都在 while 循环中设置m。而是这样做。

x=0
m = [1, 2]
while x <= 40:
x = m[-1] + m[-2]
m.append(x)
print(m)

请将初始化m = [1, 2]移到for循环之外。

x=0
m = [1, 2]
while x <= 40:
x = m[-1] + m[-2]
m.append(x)
print(m)

问题是每次循环运行时您都会为变量"m"分配相同的值,因此,m 永远不会递增,我继续

要修复它,请删除" m =[1,2]"out of while循环

正如其他人指出的那样,您的初始化应该移到循环之前。

此外,如果要求只是打印不超过 40 的值,那么您需要稍微调整一下,以便在遇到值 55(第一个大于 40 的斐波那契数(后不打印它。 下面是如何执行此操作的示例:

m = [1]
x = 2
while x <= 40:
m.append(x)
x = m[-1] + m[-2]
print(m)

这样,如果每个新值不超过 40,则在将其追加到m之前对其进行测试。

注意:斐波那契数列的前两个数字实际上被定义为 0 和 1(它从 0、1、1、2 开始...... -- 见 https://en.wikipedia.org/wiki/Fibonacci_number(,所以这段代码实际生成的是斐波那契数列中的一系列值,但错过了它的前 2 个值。

相关内容

最新更新