java - 递归求和堆栈溢出

标签 java recursion stack-overflow

我写了一个Java递归方法,计算n从0到n的总和。代码如下:

private static long sum (long n) {
    if (n == 0) {
        return 0;
    } else {
        return n + sum(n-1);
    }
}

当我传递一个很大的数字(例如11000及以上)时,有时会发生堆栈溢出。是的,我说过有时。当 n 大于或等于 11000 时,程序运行并给出答案或堆栈溢出。

谁能解释一下这是怎么回事?

最佳答案

考虑使用 For- 循环

public static long sum(long n) {
    long result = 0;
    for (int i = 1; i <= n; i++) {
        result += i;
    }
    return result;
}

或者当然,您可以使用一个奇特的公式:) 谢谢@Andy Turner

public static long sum(long n) {
    return n * (n + 1) / 2;
}

您收到 StackOverflow 异常的原因是您生成的调用堆栈比 JVM 预期的要大。

关于java - 递归求和堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38244687/

相关文章:

Java Arrays.asList(columnes).contains() 返回 false

c++ - 使用 std::unique_ptr 的递归函数内存泄漏

java - 递归的 StackOverflowError

java - 为什么导致 StackOverflowError 的递归方法的调用次数在程序运行之间会有所不同?

java - JOptionPane 对话框错误

java - 自定义 Guice 作用域应如何与 TestNG 集成?

java - 来自不同网络的 Akka 远程 Actor

c++ - 将逻辑公式转换为C++中的合取范式

java - 推广移动搜索算法以使用递归

java - Libgdx JsonWriter StackOverflowError 错误