sinat_25234961 2016-05-06 03:24 采纳率: 100%
浏览 5409
已采纳

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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 我这模型写的不对吗?为什么lingo解出来的下面影子价格这一溜少一个变量
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波