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);
}
    }
是的 - 你的堆栈空间不足.它远非无限,你在每次递归调用时都会使用它.你试图最终得到一个有400万个堆栈帧的堆栈 - 这不会起作用.
我建议你考虑一种迭代的方法.即使您拥有无限量的堆栈,该代码也可能无法在宇宙热死之前完成.(想想这段代码的复杂性......)
| 归档时间: | 
 | 
| 查看次数: | 1613 次 | 
| 最近记录: |