Collatz 序列程序不会停止 running/won 不工作
Collatz Sequence Program won't stop running/won't work
https://projecteuler.net/problem=14
我有一个程序可以计算每个数字的 collatz 序列的长度。
我尝试使用较小的数字来查看是否是因为我的程序太慢但即使这样程序也不会停止。为什么?我只能认为我的 while 循环永远不会停止,但它应该给出问题。谢谢
count = 0
count1 = 0
for n in range(2,10):
count = 0
j = n
while j != 1:
if j%2 == 0:
j = j/2
if j%2 != 0:
j = 3*j+1
count += 1
if count > count1:
count1 = count
print (count1)
问题源于 while
循环中的 if
对:
while j != 1:
if j%2 == 0:
j = j/2
if j%2 != 0:
j = 3*j+1
如上所写,条件从未实现。 j
达到值 1
的唯一方法是通过第一个 if
,但第二个 if
(因为 1
是奇数)立即将其增加到4
,造成无限循环。
一个 else
就可以了:
while j != 1:
if j % 2 == 0:
j = j / 2
else:
j = 3 * j + 1
count += 1
https://projecteuler.net/problem=14
我有一个程序可以计算每个数字的 collatz 序列的长度。 我尝试使用较小的数字来查看是否是因为我的程序太慢但即使这样程序也不会停止。为什么?我只能认为我的 while 循环永远不会停止,但它应该给出问题。谢谢
count = 0
count1 = 0
for n in range(2,10):
count = 0
j = n
while j != 1:
if j%2 == 0:
j = j/2
if j%2 != 0:
j = 3*j+1
count += 1
if count > count1:
count1 = count
print (count1)
问题源于 while
循环中的 if
对:
while j != 1:
if j%2 == 0:
j = j/2
if j%2 != 0:
j = 3*j+1
如上所写,条件从未实现。 j
达到值 1
的唯一方法是通过第一个 if
,但第二个 if
(因为 1
是奇数)立即将其增加到4
,造成无限循环。
一个 else
就可以了:
while j != 1:
if j % 2 == 0:
j = j / 2
else:
j = 3 * j + 1
count += 1