Java:对 ArrayList 使用递归

标签 java recursion arraylist

这会计算一串数字。

biggestList 和 upperBound 在顶部初始化。

即使我将 i 设置为某个非 1 数字,它也只会打印 1-> 长度为 1 个数字!

代码在处理长计数时工作正常,但是当我用保存链的 ArrayList 替换它们时,它就崩溃了。我在 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!");
}

最佳答案

我看起来每次输入calculateAnswer()时都会创建一个ArrayList的新实例并将其分配给仅在该方法范围内的tempList变量。似乎您需要访问在多个calculateAnswer() 调用中持续存在的tempList。

关于Java:对 ArrayList 使用递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25513751/

相关文章:

java - 严格模式提示资源泄漏

javascript - 如何围绕最小值划分链表

python - 如何迭代或递归确定二维数组中的邻居?

java - 从列表中获取/删除第一个元素的有效方法?

java - Wicket 口 : passing json object from javascript to java

java - [java]删除多余的空格

java - 存储键值对的最佳 Java 数据结构

javascript - 如何监视 JavaScript 中的递归函数

java - 如何在一个属性不同的两个数组列表中找到普通员工?

java - 具有多个对象的 MVC 模式