用Java采用分治法递归求最大值和最小值,产生死循环

public class GoldProblem {
public static void maxMin(int i,int j,float a[],float max,float min){
int mid;

if(i==j){
max=a[i];
min=a[j];

}
else if(i==j-1){
if(a[i]>a[j]){
max=a[i];
min=a[j];

}
else {
max=a[j];
min=a[i];

}
}

else{
float rmax=0 ,rmin=0,bmax=0,bmin=0;
mid=(i+j)/2;
maxMin(i,mid,a,rmax,rmin);
if(mid<=j){
maxMin(mid+1,j-1,a,bmax,bmin);}
if(rmax>bmax){
max=rmax;
}else{
max=bmax;

}

if(rmin>bmin){
min=bmin;
}else{
min=rmin;
}

}
System.out.println("最大值为"+max);
System.out.println("最小值为"+min);

}
public static void main(String[] args) {
float b[]={11,14,12,16,18};

maxMin(0,4,b,0,0);

}

}

DEBUG了一下才看出来,递归坑人啊。。。
也建议你用DEBUG跟踪一下。。
首先这里递归了几次
float rmax = 0, rmin = 0, bmax = 0, bmin = 0;
mid = (i + j) / 2;
maxMin(i, mid, a, rmax, rmin);
当i=0,mid=1的时候,上面几行代码的最后一行执行完成,并输出了最大最小值。
之后这个一行执行完了继续往下执行,造成死循环
即i=2,j=1追问

我也用DEBUG看到了,应把maxMin(mid+1,j-1,a,bmax,bmin);改为maxMin(mid+1,j,a,bmax,bmin);
但是输出的最大值和最小值都为0.

温馨提示:答案为网友推荐,仅供参考