Java上的基本递归

Java上的基本递归,java,recursion,Java,Recursion,我试图通过递归获得素因子,但我的代码不起作用 因子。添加(i)+因子(n/i); 在这一行中,我得到一个错误,它说: 运算符“+”不能应用于“boolean”、“int[]”。 因子{24}返回{2,2,2,3}和因子(6)返回{2,3} 我正试着了解递归,有人能帮忙吗 公共静态int[]因子(int n){ 列表因子=新的ArrayList(); int i=2; 如果(n如果您使用私有帮助器方法来处理递归,则更容易。在这种情况下,您需要提供起始除数,以便它可以通过后续的递归调用进行更改。

我试图通过递归获得素因子,但我的代码不起作用

因子。添加(i)+因子(n/i);
在这一行中,我得到一个错误,它说:

运算符“+”不能应用于“boolean”、“int[]”。
因子{24}
返回
{2,2,2,3}
因子(6)返回{2,3}

我正试着了解递归,有人能帮忙吗

公共静态int[]因子(int n){
列表因子=新的ArrayList();
int i=2;

如果(n如果您使用私有帮助器方法来处理递归,则更容易。在这种情况下,您需要提供起始除数,以便它可以通过后续的递归调用进行更改。在某些情况下,您可以初始化方法内的数据结构。但由于使用了帮助器方法,因此也可以将该结构作为参数传递。

public static void main(String[] args) {
    for (int i : new int[]{24,36,99,101}) {
         List<Integer> f = factors(i);
        System.out.println(i + " - " + f);
    }
}
方法

public static List<Integer> factors(int n) {
    return factorit(new ArrayList<>(), n, 2);
}
    
private static List<Integer> factorit(List<Integer> factrs,
        int n, int m) {
    if (n == 1) {
        return factrs;
    }
    // if m divides m, continue with m and n/m
    if (n % m == 0) {
        factrs.add(m);
        return factorit(factrs, n / m, m);
    }
    // otherwise, continue with current n and the next possible factor.
    return factorit(factrs, n, m + 1);
}
公共静态列表因子(int n){
返回factorit(newarraylist(),n,2);
}
私有静态列表因子(列表因子,
整数n,整数m){
如果(n==1){
返回因子;
}
//如果m除以m,则继续m和n/m
如果(n%m==0){
加上(m);
收益因子t(因子,n/m,m);
}
//否则,继续使用当前n和下一个可能的因子。
收益因子t(因子n,m+1);
}

因子。添加(i)+因子(n/i);
我不确定您在这里试图做什么,尽管这肯定是一个错误。您能更详细地描述一下吗?看起来您的意思是计算
因子(n/i)的值
然后将其插入列表中,但现在还不清楚您为什么要这样做。好吧,我想我开始“了解”这里发生的事情。我想,您不是想
add()
而是想
addAll()
这是对
factors()的调用
可能会产生多个因子。为此,您需要返回一个
列表,而不是一个数组,因为数组不是这样工作的。您是否尝试更改arraylist的名称?
public static List<Integer> factors(int n) {
    return factorit(new ArrayList<>(), n, 2);
}
    
private static List<Integer> factorit(List<Integer> factrs,
        int n, int m) {
    if (n == 1) {
        return factrs;
    }
    // if m divides m, continue with m and n/m
    if (n % m == 0) {
        factrs.add(m);
        return factorit(factrs, n / m, m);
    }
    // otherwise, continue with current n and the next possible factor.
    return factorit(factrs, n, m + 1);
}