如何避免在collat​​z的stackoverflow高值?

时间:2015-09-11 19:48:59

标签: java recursion collatz

我正在研究eulers问题,你必须得到最长的collat​​z链。问题是,你必须按照从1到1 000 000的顺序找到它。我的代码最高可达10万,然后抛出StackOverFlowError。我可以避免它,还是我的代码废话?

public class Collatz {
    private static final ArrayList<Integer> previous = new ArrayList<>();
    public static void main(String[] args) {

        for (int i = 1; i < 100000; i++){
            collatzLength(i, 1);
        }
        Integer i = Collections.max(previous);
        System.out.println(i);

    }

    public static void collatzLength(int n, int count){

        if (n == 1){
            previous.add(count);
        } else if (n%2 == 0){
             collatzLength(n/2, count+1);

        } else {
            collatzLength(3*n+1, count+1);
        }
    }
}

0 个答案:

没有答案