当前位置: 代码迷 >> J2SE >> 为啥栈溢出了啊
  详细解决方案

为啥栈溢出了啊

热度:111   发布时间:2016-04-23 20:12:34.0
为什么栈溢出了啊?
public class Test03 {

public static int count1 = 0;
public static int count2 = 0;
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = generateInt();
Random r = new Random();
int target = Math.abs(r.nextInt()%100000);
System.out.println("要找的目标数字:"+target);
f1(a, 0, a.length-1, target);
f2(a, 0, a.length-1, target);
}

/**
 * 黄金分割
 * @param a
 * @param begin
 * @param end
 * @param target
 */
private static void f2(int a[], int begin, int end, int target){
count2++;
if(end-begin<2){
System.out.println("没找到");
return;
}
int mid = (int) ((begin+end)*0.618);
if(a[mid]==target){
System.out.println("黄金分割运行次数"+count2);
return;
}else if(a[mid]<target){
f2(a, mid, end, target);
}else if(a[mid]>target){
f2(a, begin, mid, target);
}

}

/**
 * 二分法
 * @param a 
 * @param begin
 * @param end
 */
private static void f1(int a[], int begin, int end, int target){
count1++;
if(end-begin<2){
System.out.println("没找到");
return;
}
int mid = (begin+end)/2;
if(a[mid]==target){
System.out.println("二分法运行次数"+count1);
return;
}else if(a[mid]<target){
f1(a, mid, end, target);
}else if(a[mid]>target){
f1(a, begin, mid, target);
}

}

private static int[] generateInt(){
int a[] = new int[100000];
Random r = new Random();
for(int i=0;i<a.length-1;i++){
a[i] = Math.abs(r.nextInt()%100000);
}
Arrays.sort(a);
return a;
}
}

用黄金分割的方法居然溢出了,求大神帮忙啊
------解决思路----------------------
递归太深了吧,虚拟机栈的内存还是有限的,你设置大一点看看有没有问题
------解决思路----------------------
ls正解,把100000改为500,测试可以顺利通过
------解决思路----------------------
1楼正解,可以增加虚拟机的栈内存
------解决思路----------------------
递归次数太多,栈溢出 了
------解决思路----------------------
栈溢出基本上都是递归照常的,你别递归那么深
------解决思路----------------------
-Xss256k
  相关解决方案