这是一个递归检查,如果它是素数-是否正确?
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--);
}
答案 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);
}