【发布时间】:2020-04-28 15:20:57
【问题描述】:
我只是在编写一个小 Python 程序来运行 Collatz 算法,我认为 while 循环并没有在应该中断的时候中断。我用 VSCode 1.44.2 和 Python 3.7.5 64bit 运行这个
def collatz(n):
while n != 1.0:
if n%2 == 0:
n = n/2
else:
n = 3*n+1
print(n)
collatz(n)
collatz(3)
这是完整的输出
10
5.0
16.0
8.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
8.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
16.0
8.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
8.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
5.0
16.0
8.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
8.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
16.0
8.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
8.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
4.0
2.0
1.0
1.0
2.0
1.0
1.0
程序到此结束,没有错误。当我单步执行程序时,当 n=1.0 时,我看到一条消息“(return) collatz: None”,并且下一个调试器步骤再次进入 while 循环的开头。为什么程序没有在这一点上结束?既然 n=1 就没有结束,那为什么最终会结束,也不会一直运行呢?
【问题讨论】:
-
修复缩进。当您只需要其中之一时,似乎您正在混合循环和递归。
-
是的,你是对的 :) 在 while 循环中删除函数调用会给我正确的结果。非常感谢!
标签: python python-3.x collatz