我的 3x+1 可视化程序出现无法解释的崩溃

unexplained crash in my 3x+1 visualization program

这是我的第一个论坛 post,我对编码还很陌生。

我的代码有问题。我最近在 YouTube 上观看了 Veritasium 的一段视频,他在视频中谈到了 3x+1 定理。我决定用我新学到的知识做一些有趣的事情,并使用 python 和 turtle 制作一个可视化工具。但是,每次我 运行 它时,网页(我为此使用 Codehs)都会冻结。这是我的代码。

highestnum = 1
numchosen = int(input("starting number? "))
rounds = 1

def odd(num):
    return (num*3)+1
    
def even(num):
    return num*2
    

while True:
    if numchosen%2 == 0:
        numchosen = even(numchosen)
    else:
        numchosen = odd(numchosen)
        
    if numchosen > highestnum:
        highestnum = numchosen
        
    if numchosen == 1:
        break

print("highest number: " + str(highestnum))
print("number of changes: " + str(rounds))

请只回答我说的这个崩溃,而不是我应该做的任何优化。

您的 even 函数需要除以 2,而不是乘法。使用 // 运算符进行整数除法(以避免浮点结果):

def even(num):
    return num // 2

原来的代码是乘法而不是除法,所以这个值呈指数增长,没有尽头。

此问题称为 Collatz Conjecture

在 (def even) 中,您需要将偶数除以 2 才能得到 3x + 1 等式。

所以问题的改进版本将是:

highestnum = 1
numchosen = int(input("starting number? "))
rounds = 1

def odd(num):
    return (num*3)+1

def even(num):
    return num // 2
    

while True:
    if numchosen%2 == 0:
        numchosen = even(numchosen)
    else:
        numchosen = odd(numchosen)
        
    if numchosen > highestnum:
        highestnum = numchosen
        
    if numchosen == 1:
        break

print("highest number: " + str(highestnum))
print("number of changes: " + str(rounds))