【发布时间】:2016-05-01 07:43:52
【问题描述】:
我想应用 Collatz 序列并将其应用于从 1 到 10^6 的所有数字,并返回具有达到 1 所需的最大链的数字。但是,我的循环似乎没有终止Eclipse,我不知道为什么,我什至无法在控制台中显示我的所有打印,尽管我希望每一步都显示出来。
collatz 序列由以下规则计算:
如果n是奇数,下一个数是n/2
如果n是偶数,下一个数是3n + 1
这是我目前所拥有的:
public static long collatz() {
long res = 0;
long n = 1;
long count = 0;
long largestCount = 0;
long t = 0;
for (long k = 1; k <= 20; k++) {
n = k;
while (n != 1) {
if ((n % 2) == 0) {
n = n / 2;
count = count + 1;
}
else {
n = (3 * n) + 1;
count = count + 1;
}
if (count > largestCount) {
largestCount = count;
res = k;
}
}
}
System.out.println(res);
return res;
}
【问题讨论】:
-
你等得够久了吗?我将
k <= 1000000更改为k <= 20,这个程序退出了。 -
这应该正常执行。您正在打印一堆东西的事实导致延迟
-
根据this simulation,打印将是 264,868,848 行 + 1(“结果:”行)。为什么要这么多行?
-
感谢您的回答。我删除了打印并将 k 更改为 k