[英]Java - StackOverflowError for prime recursion
为什么这段代码会给我一个stackoverflowerror? 我试图使计数素数函数比O(n**2)
更快。
我的代码:
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;
}
代码中存在错误,导致递归无限。
但是,即使不是这种情况,您总共也可以为countPrimes
创建n
堆栈帧。 使n
足够大,您将得到堆栈溢出。
在这种情况下,您可以轻松地使用循环而不是递归。 这也会稍快一点。
在isPrime
可以实现更有效的加速,实际上,您只需要检查除数,直到数字的平方根即可。 并且在检查2之后,您也不需要检查其他偶数除数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.