Java:使用ArrayLists的递归

时间:2014-08-26 19:28:43

标签: java recursion arraylist

这会计算一串数字。

maximumList和upperBound在顶部初始化。

即使我将i设置为非1号码,也只会打印 1→ 那是1个数字!

代码在长时间的计数中运行良好,但是一旦我用持有链的ArrayLists替换它们,它就破坏了。我在ArrayList代码中做错了吗?

private void calculateIterations(){
    for (long i = 1; i <= upperBound; i++){
        calculateAnswer(i);
    }
}

private void calculateAnswer(long i) {
    long number = i;
    ArrayList <Long> tempList = new ArrayList<>();

    if (number == 1 ){
        tempList.add(number);
        if (tempList.size() > biggestList.size()){
            biggestList.clear();
            biggestList.addAll(tempList);
            printLargest();
        }
    }
    else if (number % 2 == 0){
        tempList.add(number);
        number /= 2;
        calculateAnswer(number);

    }
    else {
        tempList.add(number);
        number = number * 3 + 1;
        calculateAnswer(number);
    }
}
private void printLargest(){
    biggestList.stream().forEach((n) -> {
        System.out.print(n + " → ");
    });
    System.out.println("");
    System.out.println("That's " + biggestList.size() + " numbers long!");
}

1 个答案:

答案 0 :(得分:1)

我看起来每次进入calculateAnswer()时都会创建一个新的ArrayList实例,并将其分配给只在该方法范围内的tempList变量。好像你需要访问一个在多个calculateAnswer()调用中持久化的tempList。