我正在尝试使用 Programiz 学习代码,挑战是找到并打印斐波那契数列中小于您输入的数字的数字。这是代码,到目前为止它适用于输入 5 和 6,这两个输入在序列中分别在 3 和 5 处停止,但任何高于该数字的数字都会继续。我不明白为什么。我尝试手动跟踪循环。我输入7,它应该循环6次(范围是1,7,但在7处停止)。
> loop 1=print t1(1), result=t1(1)+t2(1), t1=t2(1), t2=result(2)
> loop 2=print t1(1), result=t1(1)+t2(2), t1=t2(2), t2=result(3)
> loop 3=print t1(2), result=t1(2)+t2(3), t1=t2(3), t2=result(5)
> loop 4=print t1(3), result=t1(3)+t2(5), t1=t2(5), t2=result(8)
> loop 5=print t1(5), result=t1(5)+t2(8), t1=t2(8), t2=result(13)
它不应该停在这里吗,因为 t1=8 大于 n(7),关闭 while 循环
n = int(input())
t1 = 1
t2 = 1
result = 0
while t1<n:
for num in range (1,n):
print(t1)
result=t1+t2
t1=t2
t2=result
抱歉问了这么长的问题,我只是想我应该解释一下我的故障排除思路,如果有人可以提供帮助,我们将不胜感激。
您的内部循环除了从
1
迭代到 n-1
之外没有任何约束。
如果您输入
7
,该内部循环将运行六次,即使这意味着 t1
最终大于 n
。
考虑一下我们是否输入
12
:
>>> t1 = 1
>>> t2 = 1
>>> result = 0
>>> while t1<n:
... for num in range (1,n):
... print(t1)
... result=t1+t2
... t1=t2
... t2=result
...
1
1
2
3
5
8
13
21
34
55
89