使用递归检查数字是否为质数

时间:2018-12-02 11:33:22

标签: recursion primes

这是一个递归检查,如果它是素数-是否正确?

public static boolean isPrimeRecursive (int n,int i){//i eqoual to n
    if (n <= 1) {  
       return false;  
    }if (i==1){
        return false;
    }if(n%i==0){
        return false;
    }

   return isPrimeRecursive(n,i--);
}

2 个答案:

答案 0 :(得分:1)

我不会给您的用户增加神秘的第二个参数,而是为另一个参数提供一个不同的方法,该方法首先处理小于2甚至偶数的数字,然后使用适当的参数调用递归方法:

private static boolean isPrimeRecursive(int n, int i) {

    if (i * i > n) {
        return true;
    }

    if (n % i == 0) {
        return false;
    }

    return isPrimeRecursive(n, i + 2);
}

public static boolean isPrime(int n) {

    if (n <= 2 || n % 2 == 0) {
        return (n == 2);
    }

    return isPrimeRecursive(n, 3);
}

public static void main(String[] args) {

    System.out.println(isPrime(Integer.parseInt(args[0])));
}

答案 1 :(得分:0)

对于您的代码,您应该以{{1​​}}的值从i开始,因为n-1始终是质数。

然后在您的条件下(n % n,应返回true,因为如果方法达到if (i == 1) { ... },则它满足所有其他条件。

最后,在返回语句1中,最好使用return isPrimeRecursive(n, i++);,因为++i将在函数执行后以i++的值递增。

i

然后在您的主要功能中使用:

public static boolean isPrimeRecursive (int n,int i){
    if (n <= 1) {  
       return false;  
    }

    if (i == 1) {
        return true;
    }

    if(n % i == 0){
        return false;
    }

   return isPrimeRecursive(n, --i);
}

另一种实现方法是始终以int n = 17; System.out.println(isPrimeRecursive(n, n-1); 的值开始i并递增其值。从那里。

2

然后您简单地做:

public static boolean isPrimeRecursive (int n, int i) {
    if (n <= 2) {  
       return (n == 2) ? true : false;  
    }

    if (i >= n) {
        return true;
    }

    if (n % i == 0) {
        return false;
    }

    return isPrimeRecursive(n, ++i);
}