gpt4 book ai didi

java - 项目 Euler 14 - Java StackOverflowError

转载 作者:行者123 更新时间:2023-12-02 06:20:35 24 4
gpt4 key购买 nike

对于那些不熟悉该问题的人,here是的。

我收到一个带有以下代码的 StackOverflowError:

public class LongestCollatzSequence {

static int count = 1;

public static void main(String[] args) {
final int range = 1000000;
int maxSeq = 0;
List<Integer> chainList = new ArrayList<Integer>();

for(int i = 1; i <= range; i++) {
generateSequence(i);
if(chainList.isEmpty()) {
chainList.add(count);
count = 1;
} else if(!chainList.contains(count) && count > Collections.max(chainList)) {
chainList.clear();
chainList.add(count);
maxSeq = i;
count = 1;
}
}
System.out.println("Sequence starting number: "+maxSeq);
}

private static void generateSequence(int num) {
if(num == 1) {
return;
}
if(num % 2 == 0) {
count++;
generateSequence(num/2);
} else {
count++;
generateSequence(num*3+1);
}
}

}

高级流程:

-对于数字 2 - 100000,生成该数字的 collat​​z 序列。-链列表是存储为每个数字生成的序列长度的列表,即数字 13 的序列大小为 10(参见示例)。-如果当前序列大小大于链表中的最大值,则清除链表并添加新的最大值,并将i的值存储在maxReq中以记住产生最长链的起始编号。

最佳答案

有趣的问题,但是java中的int被限制为2^31-1,你可以使用long或BigInteger来打破这个限制

  private static void generateSequence(long num) {
if (num == 1) {
return;
}
if (num % 2 == 0) {
count++;
generateSequence(num / 2);
} else {
count++;
generateSequence(num * 3 + 1);
}
}

关于java - 项目 Euler 14 - Java StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21066549/

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