我写了一个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/