sinat_25234961
2016-05-06 03:24
采纳率: 70.6%
浏览 5.0k
已采纳

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);
}

}

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • danielinbiti 2016-05-06 04: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);
    
    打赏 评论
  • On_the_orad 2016-05-06 05: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 2016-05-06 05:59

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

    打赏 评论

相关推荐 更多相似问题