gpt4 book ai didi

algorithm - 为什么我的数字在 Collat​​z 序列中只停留在 2?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:00:54 24 4
gpt4 key购买 nike

我正在尝试编写一个程序,使用 Collat​​z 序列计算数字何时达到零。这是我为该程序编写的代码:

import time

def run(z):
while z != 1:
if isEven(z) == True:
z = z/2
print z
else:
z = (3*z)+1
print z
else:
print 'Got one!'
z = z+1
print 'Trying for %d...' %(z)
time.sleep(0.1)
run(z)



def isEven(number):
return number % 2 == 0

run(z)

但是,z 永远不会超过 2,它只会继续打印:

Got one!
Trying for 2...
1
Got one!
Trying for 2...
1

等等...谁能告诉我我做错了什么?

最佳答案

Collatz conjecture是你会达到一,而不是零;当你到达一个时,你应该停下来。此外,while 循环和递归调用的组合很奇怪。一个非常简单的递归实现:

def collatz(n):
print(n)
if n == 1: # base case
print("Done!")
else:
if n % 2: # odd number
collatz((3 * n) + 1)
else: # even number
collatz(n / 2)

或迭代版本:

def collatz(n):
while n != 1:
print(n)
if n % 2: # odd number
n = (3 * n) + 1
else: # even number
n /= 2
print(n)
print("Done!")

如果您想分析一个数字达到一个数字需要多长时间,您可以重新调整其中一个实现,例如:

def collatz(n):
count = 0
while n != 1:
count += 1
if n % 2: # odd number
n = (3 * n) + 1
else: # even number
n /= 2
return count

然后您可以调用此函数,处理整数,为每个整数创建 Collat​​z 序列,例如:

seq_len = [(n, collatz(n)) for n in range(1, 101)]

关于algorithm - 为什么我的数字在 Collat​​z 序列中只停留在 2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21357911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com