2

我一直在尝试编写一个 python 脚本来绘制一个数字通过 collat​​z 猜想所需的迭代图。在这个例子中,我只使用了一个很小的范围(只有数字 1),但是这个脚本似乎一直在运行,即使运行了 10 分钟也不会产生图表。下面是代码。有什么建议吗?

import math
import matplotlib.pyplot as plt

def collatz(x):
    count = 0
    while x != 1:   
        if x % 2 == 0:
            x=x/2
            count=count+1
        else:
            x=(x*3)+1
            count=count+1
    return count 
x_coordinates = []
y_coordinates = []
for i in range(0, 2):
    x_coordinates.append(i)
    y = collatz(i)
    y_coordinates.append(y)

plt.plot(x_coordinates, y_coordinates)
plt.show()
4

1 回答 1

2

所以你用 , 开始你的迭代y = collatz(0)x==0然后你进入while x != 1循环,对吗?

现在 if 子句会发生什么?

if 0 % 2 == 0:
    x = 0/2 # == 0

所以 x 永远不会变成 1 并且你会一直运行 while 循环,不是吗?

如果您指的Collat​​z 问题,那么您应该仔细阅读该声明:

对于所有n > 0,从初始值 n 开始的 Collat​​z 序列是否最终达到 1 ?

于 2014-05-20T22:02:24.360 回答