java—编写一个递归方法来查找传入数字的素数因子

guz6ccqo  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(360)

我必须写一个递归的方法来寻找一个传入的数的素数因子。素因子应该以字符串的形式返回,其中素因子由空格分隔,并按从最小到最大、从左到右的顺序排列。如果传入的数字是prime,则应返回字符串“prime”。我给这个程序以下的内容

FindPrime p10 = new FindPrime(408);

我应该得到:2x2x3x17,但是输出是:

2x2x2x3x4x4xprime number

这是我编写的程序

public class FindPrime{
public int div = 2;

public FindPrime(int i) {
    System.out.println(i + " factorization:");
    findPrime(i);
    System.out.println();
}

public void findPrime(int num) {
    if(num == 1) {
        System.out.println("prime number");
        return;
    }
    else if(num % div == 0) {
        System.out.print(div + "x");
        findPrime(num/div);
    }
    else {
        div++;
        System.out.print(div + "x");
        findPrime(num/div);

    }       
}

}
有人能帮忙吗?我不知道还能去哪里

ufj5ltwl

ufj5ltwl1#

这是因为:
首先,在else语句中,为什么要分开( findPrime(num/div); )
第二,不知道是什么 if(num == 1) 方法
所以应该是这样的:

public int div = 2;
    public void FindPrime(int i) {
        System.out.println(i + " factorization:");
        findPrime(i);
        System.out.println();
    }

    public void findPrime(int num) {
        if(div == num) {// it's the base case
            System.out.print(div);
        }
        else if(num % div == 0) {
            System.out.print(div + "x");
            findPrime(num/div);
        }
        else {
            div++;
            //System.out.print(div + "x");// Why are you sure that it's going to divide?
            findPrime(num);//you pass in the number, not divide then pass it in

        }       
    }

相关问题