0
爲什麼此代碼會給我一個stackoverflowerror?我試圖使計數素數函數比O(n**2)
更快。Java - 針對主要遞歸的StackOverflowError
我的代碼:
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;
}
你遞減n,但是什麼時候遞歸停止?目前,遞歸調用總是被觸發 –
只是一個旁註:你可以跳過幾乎一半的迭代,因爲除了2以外,每個偶數都不能是一個素數 –