Java 使用递归确定输入是否为素数
我试着搜索类似的问题,看看答案是否在这个网站上,但没有结果。 我目前正试图编写一个程序,用递归方法确定用户输入是否为素数。问题是它不会编译do到范围中已经定义的变量“n”。我不太明白编译器的意思。 这是我的密码Java 使用递归确定输入是否为素数,java,recursion,Java,Recursion,我试着搜索类似的问题,看看答案是否在这个网站上,但没有结果。 我目前正试图编写一个程序,用递归方法确定用户输入是否为素数。问题是它不会编译do到范围中已经定义的变量“n”。我不太明白编译器的意思。 这是我的密码 /** * Created on 3/26/2017. **/ import java.util.Scanner; public class PrimeNumberRecursion { public static void main(String[] 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);}
}
}
“n”是重复变量。您在
intn使用它
和String[]n
将String[]n
重命名为n1或其他如果从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);
}
}
公共静态布尔值isPrime(int n,int div){
如果(n<2 | |数学sqrt(n)>div){
返回false;
}else if(n%div==0){
返回true;
}否则{
返回isPrime(n,++div);
}
}
不用担心。如果你对答案满意,请注明你是否也知道我确定素数的逻辑有什么问题?我似乎对我的逻辑有问题。从表面上看,我有两个问题。1) 您的程序将返回1作为素数,这是不正确的。2) 您正在增加div,最终它将变为等于n(前提是n>2)。所以,如果(n==div){return-1;}将被执行,并且-1将被返回。不管怎样,我明白了,这是一个单独的问题。没错。忘了换了。谢谢你的洞察力。如果我在询问时做了任何错误的事情,请向mods道歉。仍然很新,我正在努力做到自给自足。欢迎访问stackoverflow.com:)更改变量n的名称,您将使用它两次。main方法的参数作为字符串和int变量。如果isPrime
返回一个布尔值,不是更好吗?返回1或-1不是很好的描述。是的,这肯定是更好的代码。但我通常会在事后修改这类内容。为了提高效率,不要一遍又一遍地重新计算sqrt(n)
。顺便说一下,这些都是正确的观点,但它们不是问题的答案。