簡體   English   中英

Java遞歸查找素數不起作用

[英]Java recursion to find prime factors doesn't work

我試圖得到一個數字的所有質因數。 for循環應該一直工作,直到找到匹配項,並且應該中斷並跳轉到下一個if語句,該語句檢查 number 是否不等於 0。

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);
        }                   

    }
}

至少有三個錯誤:

  • 正如 okiharaherbst 所寫,您的計數器不會增加。
  • 您從 1 開始循環,因此 yourval % 1 始終等於 0,而 new_numb 始終等於您的輸入 val,因此您將在 104 上無休止地循環。
  • new_numb 永遠不會小於 0。

您要求遞歸解決方案。 干得好:

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;
    }
}

代碼不是防彈的,它只是一個快速而骯臟的例子。

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);
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM