【发布时间】:2012-10-22 12:20:28
【问题描述】:
在做实现Collatz Conjecture 的Java 作业时,我想到了一个不同的目标,即找到最长的Collatz 序列。我的程序计算步骤如下:
public class Collatz {
static int count = 0;
static void bilgi (int n){
int result = n;
System.out.println("Result: "+result+ " Step: "+count);
if (result <= 1) {
result = 1;
} else if (result%2 == 0){
result = result/2;
count = count + 1;
bilgi(result);
} else {
result = (result*3)+1;
count = count + 1;
bilgi(result);
}
}
public static void main(String[] args) {
bilgi(27);
}
}
我想找到最高的步数。
【问题讨论】:
-
那么你的问题是什么?
-
从
bilgi返回计数,并记住最高的。但是使用long作为数字,它们会变得非常大。 -
我不想一个一个地检查它们,例如,如果我从 1 到 100 运行这个 bilgi,哪个序列将是最高的。最长的一步。
-
但是最长的序列可能有无限长。事实上,可以证明对于任何数 n,都存在一个长度为 n 的 Collatz 序列。所以期待等待很长时间才能找到 LONGEST 序列。
-
关于 Collatz 的要点,与斐波那契不同,1..n 范围内的数字可以映射(通过 k→ 3k+1 步)到范围之外(更高)。因此,从 1..100 开始运行也需要为该范围之外的选择点计算 Collatz。 Example for 27。与斐波那契不同,范围的运行时间不是确定性的(对于较大的 n,甚至是有界的,尽管它已针对 64 位自然数进行了验证)。
标签: algorithm numbers sequence collatz highest