Java递归查找素数因子';行不通

Java递归查找素数因子';行不通,java,recursion,Java,Recursion,我试图得到一个数的所有素数因子。for循环应该一直工作,直到找到匹配项,它应该中断并跳转到下一个if语句,该语句检查数字是否不等于零 public class Factor { public static ArrayList <Integer> HoldNum = new ArrayList(); public static void main(String[]args){ Factor object = new Factor();

我试图得到一个数的所有素数因子。
for
循环应该一直工作,直到找到匹配项,它应该中断并跳转到下一个
if
语句,该语句检查数字是否不等于零

public class Factor {

    public static ArrayList <Integer> HoldNum = new ArrayList(); 

    public static void main(String[]args){
        Factor object = new Factor();
        object.Factor(104);
        System.out.println(HoldNum.get(0));
    }

    public static int Factor(int number){
        int new_numb = 0;
        int n=0;
        for( n = 1; n < 9; n++) {                 
            if (number % n == 0) {
                HoldNum.add(n);
                new_numb = number/n;
                break;           
            }
        }

        System.out.println(new_numb);
        if(new_numb < 0) {
            HoldNum.add(new_numb);
            return 1;
        } else {
            return Factor(new_numb);
        }                   

    }
}
公共类因素{
public static ArrayList HoldNum=new ArrayList();
公共静态void main(字符串[]args){
因子对象=新因子();
客观因素(104);
System.out.println(HoldNum.get(0));
}
公共静态整数因子(整数){
int new_numb=0;
int n=0;
对于(n=1;n<9;n++){
如果(编号%n==0){
添加(n);
新编号=编号/n;
打破
}
}
系统输出打印LN(新编号);
如果(新的编号<0){
HoldNum.add(new_numb);
返回1;
}否则{
返回系数(新值);
}                   
}
}

您要求递归解决方案。给你:

public class Example {

    public static void main(String[] args) {
        System.out.println(factors(104));
    }

    public static List<Integer> factors(int number) {
        return factors(number, new ArrayList<Integer>());
    }

    private static List<Integer> factors(int number, List<Integer> primes) {
        for (int prim = 2; prim <= number; prim++) {
            if (number % prim == 0) {
                primes.add(prim);
                return factors(number / prim, primes);
            }
        }
        return primes;
    }
}
公共类示例{
公共静态void main(字符串[]args){
系统输出打印项数(因子(104));
}
公共静态列表因子(整数){
返回因子(number,new ArrayList());
}
私有静态列表因子(整数、列表素数){

对于(int prim=2;prim至少有三个错误:

  • 正如okiharaherbst所写,您的计数器不会递增
  • 循环从1开始,因此您的val%1始终等于0,new_numb始终等于您的输入val,因此您将无休止地在104上循环
  • new_numb永远不会小于0
Java实现

public class PrimeFactor {

public int divisor=2;
void printPrimeFactors(int num)
{

    if(num == 1)
        return;

    if(num%divisor!=0)
        {
        while(num%divisor!=0)
            ++divisor;          
        }
    if(num%divisor==0){

    System.out.println(divisor);
        printPrimeFactors(num/divisor);
    }

}
public static void main(String[] args)
{
    PrimeFactor obj = new PrimeFactor();
    obj.printPrimeFactors(90);
}

}

您尚未说明您当前面临的问题。您需要告诉我们发生了什么?(通常,向其他人解释问题会让您自己找到解决方案。)for循环可变变量没有增加。问题是它将创建一个不定式循环。我的逻辑是,for循环将一直工作,直到它找到一个合适的值,该值可以与int number等分,然后合适的值将存储在Arraylist Holdnum中。如果合适,break语句应停止for循环able值为find,之后程序应检查remainin值是否小于0,如果不小于0,则应返回具有新值的因子