我写了代码来写斐波那契数列,直到元素不超过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 个值。