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