繁体   English   中英

Java-首要递归的StackOverflowError

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM