2 sinat 25234961 sinat_25234961 于 2016.05.06 11:24 提问

java递归 if() return返回到哪里?

学习归并排序时,遇到递归的思想。
测试输入 mergesortexample
单步调试到,if (hi<=lo) return;当hi=0,lo=0时,执行return,在我理解中,return就是退出方法了,为何会跳到 sort(a,mid+1,hi);而且此时,lo=0,hi=1?

private static void sort(Comparable[] a,int lo,int hi){
//将数组a【lo hi】排序
if (hi<=lo) return;
int mid=lo+(hi-lo)/2;
sort(a,lo,mid);
sort(a,mid+1,hi);
merge(a,lo,mid,hi);
}

import java.util.Scanner;

public class Merge {
private static Comparable[] aux;

public static void sort(Comparable[] a){

    aux=new Comparable[a.length];
    sort(a,0,a.length-1);
}

private static boolean less(Comparable v,Comparable w){
    return v.compareTo(w)<0;
}

public static void merge(Comparable[] a,int lo,int mid,int hi){
    //将a【lo mid】与a【mid+1,hi】归并
    int i=lo;
    int j=mid+1;

    for(int k=lo;k<=hi;k++){
        aux[k]=a[k];
    }

    for(int k=lo;k<=hi;k++){
        if(i>mid)                          a[k]=aux[j++];
        else if(j>hi)                      a[k]=aux[i++];
             else if(less(aux[j],aux[i]))  a[k]=aux[j++];
                  else                     a[k]=aux[i++];
    }
}

private static void sort(Comparable[] a,int lo,int hi){
    //将数组a【lo hi】排序
    if (hi<=lo) return;
    int mid=lo+(hi-lo)/2;
    sort(a,lo,mid);
    sort(a,mid+1,hi);
    merge(a,lo,mid,hi);
}
private static void show(Comparable[] a){
    //在单行中打印数组
    for(int i=0; i<a.length;i++)
        System.out.print(a[i]+"");
    System.out.println();

}
public static boolean isSorted(Comparable[] a){
    //测试数组是否有序
    for(int i=1;i<a.length;i++)
        if(less(a[i],a[i-1])) return false;
    return true;
}
public static void main(String[] args){
    //从标准输入读取字符串,将它们排序并输出
     System.out.print("输入");
     Scanner s = new Scanner(System.in);
     String line=s.nextLine();
     System.out.println("输入的是"+line);                

    char [] charArr =line.toCharArray();    
    String[] strArr = new String[charArr.length];

    for(int i = 0; i < strArr.length; i++) {
        strArr[i] = String.valueOf(charArr[i]);
    }

    sort(strArr);
    assert isSorted(strArr);
    show(strArr);
}

}

4个回答

danielinbiti
danielinbiti   Ds   Rxr 2016.05.06 12:21
已采纳
 因为是递归
 if (hi<=lo) return;
    int mid=lo+(hi-lo)/2;
    sort(a,lo,mid);
    sort(a,mid+1,hi);
你跳出的是sort(a,lo,mid);这一步函数调用,这个函数调用return返回后就是执行sort(a,mid+1,hi);
sinat_25234961
sinat_25234961 哦,是因为递归调用的关系,了解了
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.05.06 11:32

方法中的if与return
if(放弃(something)){dosomething();return 成功;}
java return返回的是啥
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

chenhchen1994
chenhchen1994   2016.05.06 13:41

```private static void sort(Comparable[] a,int lo,int hi){
//将数组a【lo hi】排序
if (hi<=lo) return;
int mid=lo+(hi-lo)/2;
sort(a,lo,mid);
sort(a,mid+1,hi);
merge(a,lo,mid,hi);
}

 当你走到这里的时候,你if没有加{}   而你定义的 又是void  当你执行到return 会直接跳出这个方法的


```    int mid=lo+(hi-lo)/2;
    sort(a,lo,mid);
    sort(a,mid+1,hi);
    merge(a,lo,mid,hi);

这写代码应该不会执行的吧

havedream_one
havedream_one   2016.05.06 13:59

return 回到你调用这个方法的地方

qq_27540147
qq_27540147 ...
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!