当前位置: 首页 > 知识库问答 >
问题:

Java 递归添加到列表

养焱
2023-03-14

一切似乎都很好,但是这一行有一个错误:

return new ArrayList<Integer>(Arrays.asList(i, FACTORISATION(n/i)));

错误是:构造函数ArrayList(Arrays.asList(i), ArrayList)未定义

我知道错误是说数组的asList方法不接受ArrayList,但是我如何在列表中添加因式分解返回的项呢?这种递归真的把我搞糊涂了

共有1个答案

徐峰
2023-03-14

Java并不是真正的函数式编程语言,所以编写这样的函数式代码往往有点笨拙。

你想要这样的东西:

public static List<Integer> FACTORISATION(int n) {
    if (PRIME(n)) {
        // return a one-element array
        return Collections.singletonList(n);
    } else {
        // find a prime divisor, p
        for (int i = 2; i < Math.sqrt(n); i++) {
            List<Integer> newList = new ArrayList<>();
            newList.add(i);
            newList.addAll(FACTORISATION(n/i));
            return newList;
        }
        return Collections.emptyList();
    }
}

注意:我已更改为返回接口类型列表

如果您可以使用Guava,请尝试ImmutableList,它会更优雅一点。

public static List<Integer> FACTORISATION(int n) {
    if (PRIME(n)) {
        // return a one-element array
        return ImmutableList.of(n);
    } else {
        // find a prime divisor, p
        for (int i = 2; i < Math.sqrt(n); i++) {
            return new ImmutableList.Builder<Integer>()
                .add(i)
                .addAll(FACTORISATION(n/i))
                .build();
        }
        return Collections.emptyList();
    }
}

 类似资料:
  • 有递归函数的问题,应该相对简单做,但似乎不能得到正确的。 我有一个文件夹结构,它的文件夹可以包含其他文件夹、图像或文件。每个文件夹都有权限。我想让我的函数递归地构建一个与每个文件夹关联的权限列表。 改了号, 得到:

  • 如何使用递归在列表的最后添加一个项目?我想通过递归添加列表的最后一个,但不能这样做,因为我通过指针指向最后一个元素,所以它返回添加的元素和最后一个元素,而不是整个列表。

  • 本文向大家介绍JAVA递归与非递归实现斐波那契数列,包括了JAVA递归与非递归实现斐波那契数列的使用技巧和注意事项,需要的朋友参考一下 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1] )以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、…

  • 我有一个问题,如何更好地完成这项任务,我有一种版本,但我确信可能有一种更好、更短的方法来完成这项工作。我需要取任何整数(将其作为一个整数返回,而不将其转换为字符串),但不要在结尾处使用0(100、120),而是像1234或4132。我需要取这个数字,并使用递归将其重写为另一种方式,例如1234到4321、4132到2314,也许有一种方法叫它,我个人不知道。 以下是我得到的信息:

  • 我试图使用递归打印链表中每个节点中的数据,但是我得到了越界错误,所以我认为递归函数有问题。 这是头文件: 基本上,我从公共函数调用私有助手函数。下面是两个函数的代码: 我认为问题出在if块中,因为如果没有下一个节点,我需要停止,但在返回之前还需要打印当前节点中的数据,但因为我已经调用了

  • 问题内容: 请解释以下简单代码: 我对最后一行感到困惑,特别是因为例如,如果n = 5,则将调用fibonacci(4)+ fibonacci(3),依此类推,但我不理解该算法如何以此来计算索引5的值方法。请详细解释! 问题答案: 在斐波那契数列中,每一项都是前两项的总和。因此,你编写了一个递归算法。 所以, 现在你已经知道了。因此,你可以随后计算其他值。 现在, 从斐波那契数列中我们可以看到斐波