【问题标题】:Collatz Sequence Program won't stop running/won't workCollat​​z 序列程序不会停止运行/无法工作
【发布时间】:2019-06-07 19:58:42
【问题描述】:

https://projecteuler.net/problem=14

我有一个程序可以计算每个数字的 collat​​z 序列的长度。 我尝试使用较小的数字来查看是否是因为我的程序太慢但即使那样程序也永远不会停止。为什么?我只能认为我的 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)

【问题讨论】:

  • 这是一个熟悉调试器的好机会。尝试查看您的 IDE 是否有调试器并设置一些断点。它会让你“暂停”你的代码,让你看看每一步都有哪些变量。 剧透:将您的第二个 if 更改为 elif

标签: python collatz


【解决方案1】:

问题源于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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多