Pourquoi ce code me donne un StackOverflowError? J'essaie de faire fonctionner les nombres premiers plus rapidement que O(n**2)
.Java - StackOverflowError pour le premier récursion
Mon code:
public class TestingJavaCode {
public int countPrimes(int n) {
int counter = 0;
n--;
if (n > -1 && this.isPrime(n)) {
counter++;
}
counter += countPrimes(n);
return counter;
}
public boolean isPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0)
return false;
}
return true;
}
vous n décrémentez, mais quand est-ce l'arrêt de la récursivité? Au moment où l'appel récursif est toujours frappé –
Juste un sidenote: vous pouvez sauter près de la moitié de vos itérations puisque chaque nombre pair, sauf 2, ne peut pas être un premier –