【发布时间】:2019-03-01 00:59:59
【问题描述】:
public static int rFib(int n) {
if(n == 0) {
return 0;
}
if(n == 1) {
return 1;
}
return n + rFib(n-1);
}
我正在尝试找到将在 60 秒内计算的最大数字。然后我将使用迭代方法进行比较。任何大于 10,000 的数字都会产生堆栈溢出错误。我该如何避免这种情况?
【问题讨论】:
-
尝试将一些结果存储在数组 fib[i] 中,以减少不必要的方法调用的成本吗?
-
“如何避免这种情况?” 不要使用递归。 --- 您可以增加堆栈大小,但这只会提高限制。无需使用递归即可计算斐波那契。
-
10,000 gives a stack-overflow error.- 会发生什么? -
@buræquete 这将提高性能,但不会修复堆栈溢出错误。如果 number 大于 10,000,结果是调用堆栈 10,000 深,当然这会导致堆栈溢出错误。
-
仅供参考:您的实现是错误的。你实现了
f(n) = n + f(n-1),但是斐波那契函数是f(n) = f(n-1) + f(n-2)
标签: java recursion stack-overflow fibonacci