修复线程“main”中的异常java.lang.StackOverflowError

时间:2016-09-09 13:22:52

标签: java stack-overflow

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)+" ");

}

1 个答案:

答案 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); 
}