С вашим кодом вы должны начинать с i
со значения n-1
, поскольку n % n
всегда верно для простых чисел.
Тогда в вашем состоянии (if (i == 1) { ... }
, должно возвращаться trueпотому что если метод достигает значения 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);
}
Затем вы просто делаете:
int n = 17;
System.out.println(isPrimeRecursive(n, 2);