public class Fibonacci2 {
static int fib(int n) {
if(n==1 || n==2) {
return(1);
}
return fib((n-1)+fib(n-2));
}
// Stackoverflow error //
public static void main(String[] args) {
int i, n = 7;
for(i=1; i<=n; i++)
System.out.println("FIbonaci series" + fib(i));
}
}
此程序遇到运行时异常(stackoverflow)请告诉如何处理它。
答案 0 :(得分:5)
您逐步调试调试器中的代码,您将看到
return fib((n-1)+fib(n-2));
应该是
return fib(n-1) + fib(n-2);
就像你拥有的一样
return fib(fib(n-2));
可以快速创建非常高级别的递归。
答案 1 :(得分:2)
将fib((n-1)+fib(n-2))
替换为fib(n-1)+fib(n-2)
。
答案 2 :(得分:0)
也许会对您有帮助
public static void fib(int initial, int current, int n) {
int sum = 0;
sum = initial + current;
if (initial == 0) {
System.out.print(current + " ");
}
System.out.print(sum + " ");
initial = current;
current = sum;
if (n > 2) {
fib(initial, current, n - 1);
}
}