一切似乎都很好,但是这一行有一个错误:
return new ArrayList<Integer>(Arrays.asList(i, FACTORISATION(n/i)));
错误是:构造函数ArrayList(Arrays.asList(i), ArrayList)未定义
我知道错误是说数组的asList方法不接受ArrayList,但是我如何在列表中添加因式分解返回的项呢?这种递归真的把我搞糊涂了
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的值方法。请详细解释! 问题答案: 在斐波那契数列中,每一项都是前两项的总和。因此,你编写了一个递归算法。 所以, 现在你已经知道了。因此,你可以随后计算其他值。 现在, 从斐波那契数列中我们可以看到斐波