StackOverflowError的原因是什么?我试了一会儿,但仍然无法理解它为什么会发生,以及如何解决它。
代码中使用的公式是必需的。
public static long fib(long n){
if(n == 1 || n == 2)
return 1;
else if(n > 2 && n%2 == 0)//even
return fib((n/2+1)*(n/2+1)) - fib((n/2-1)*(n/2-1));
else //odd
return fib(((n+1)/2)*((n+1)/2)) + fib(((n-1)/2)*((n-1)/2));
}
public static void main(String[] args){
for(int i = 1; i <= 10; i++)
System.out.println(fib(i)+" ");
}
答案 0 :(得分:0)
不确定您要使用您的方法尝试实现的目标,但只需在代码中添加一些System.out.println,就可以看到每次递归调用中的内容。因为我看到你的&#34;奇怪&#34;调用进入无限循环,这就是为什么你得到StackOverflowError错误,通常这是因为你的递归函数没有正确的终止条件,也就是说,它最终会自动调用它自己。
您开始使用代码的方式以及&#34; fib&#34;方法名称,看起来你正在尝试执行Fibonacci,这可以通过更简单的方式完成:
public static int getFibonacci(int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 1;
}
return getFibonacci(n - 1) + getFibonacci(n - 2);
}