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

这是我的第一篇论坛帖子,我对编码还很陌生。

我的代码有问题。我最近在 YouTube 上观看了 Veritasium 的一段视频,其中他谈到了 3x+1 定理。我决定用我的新知识做一些有趣的事情,并使用 python 和乌龟制作一个可视化工具。但是,每次运行它时,网页(我为此使用 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))

请只回答我正在谈论的这次崩溃,而不是我应该做的任何优化。

saab95 回答:我的 3x+1 可视化程序中无法解释的崩溃

您的 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))
本文链接:https://www.f2er.com/3807.html

大家都在问