使用递归斐波那契函数时发生堆栈溢出错误

P R*_*P R 2 java stack-overflow

这是我的代码,它运行良好,值为400到4000,但一旦它大约4mil,我得到堆栈溢出错误.

提前致谢!

public class Fib {
static int c=1,b=2;
static long sum1=0,sum2=0;

static long fib(long a){
if(a==1){
    return 1;
}
if(a==2){
    return 2;
}
else{
    return fib(a-1)+fib(a-2);
}

    }


    public static void main(String[] args){
sum2= fib(4000000);
    System.out.println("Sum %f" +sum2);
}
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

是的 - 你的堆栈空间不足.它远非无限,你在每次递归调用时都会使用它.你试图最终得到一个有400万个堆栈帧的堆栈 - 这不会起作用.

我建议你考虑一种迭代的方法.即使您拥有无限量的堆栈,该代码也可能无法在宇宙热死之前完成.(想想这段代码的复杂性......)