使用递归来确定输入是否为素数

时间:2017-04-01 17:32:03

标签: java recursion

我试图搜索类似的问题,看看答案是否可能在这个网站上无济于事。 我目前正在尝试编写一个程序,使用递归方法确定用户输入是否为素数。问题是它不会编译到变量" n"已经在范围内定义。我不太清楚编译器的含义。 继承人是我的代码

/**
 * Created on 3/26/2017.
 **/
import java.util.Scanner;
public class PrimeNumberRecursion {
    public static void main(String[] n) {
        //Variables declared
        Scanner userInput = new Scanner(System.in);
        int n;
        int div = 2;
        //Program is introduced
        System.out.println(" Prime Number Recursion Program");
        System.out.println("*********************************");
        //User is prompted for a number
        System.out.print("Please enter a number: ");
        n = userInput.nextInt();
        //Conditional statement prints result
        if(isPrime(n,div) == 1){System.out.println(n +" is a prime number");}
        else{System.out.println(n +" is not a prime number");}
    }
    //User input is passed to isPrime recursive method
    public static int isPrime(int n, int div) {
        if(n == 1) {return 1;}
        else if(n % div == 0) {return -1;}
        else if(n == div) {return -1;}
        else{return isPrime(n, ++div);}
    }
}

2 个答案:

答案 0 :(得分:0)

' N'是一个重复的变量。您正在int n;String[] n使用它,将String [] n重命名为n1或其他

答案 1 :(得分:0)

如果从2开始,您只需要检查n的平方根以获得更高的效率。同样如前所述,任何低于2的数字都不是素数。

public static boolean isPrime(int n, int div) {
    if ( n < 2 || Math.sqrt(n) > div) {
        return false;
    } else if (n % div == 0) {
        return true;
    } else {
        return isPrime(n, ++div);
    }
}