问题描述
- java递归 if() return返回到哪里?
- 学习归并排序时,遇到递归的思想。
测试输入 mergesortexample
单步调试到,if (hi<=lo) return;当hi=0,lo=0时,执行return,在我理解中,return就是退出方法了,为何会跳到 sort(amid+1hi);而且此时,lo=0,hi=1?private static void sort(Comparable[] aint loint hi){
//将数组a【lo hi】排序
if (hi<=lo) return;
int mid=lo+(hi-lo)/2;
sort(alomid);
sort(amid+1hi);
merge(alomidhi);
}import java.util.Scanner;
public class Merge {
private static Comparable[] aux;public static void sort(Comparable[] a){ aux=new Comparable[a.length]; sort(a0a.length-1);}private static boolean less(Comparable vComparable w){ return v.compareTo(w)<0;}public static void merge(Comparable[] aint loint midint 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[] aint loint hi){ //将数组a【lo hi】排序 if (hi<=lo) return; int mid=lo+(hi-lo)/2; sort(alomid); sort(amid+1hi); merge(alomidhi);}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);}
}
解决方案
因为是递归 if (hi<=lo) return; int mid=lo+(hi-lo)/2; sort(alomid); sort(amid+1hi);你跳出的是sort(alomid);这一步函数调用,这个函数调用return返回后就是执行sort(amid+1hi);
解决方案二:
方法中的if与return
if(放弃(something)){dosomething();return 成功;}
java return返回的是啥
解决方案三:
```private static void sort(Comparable[] aint loint hi){
//将数组a【lo hi】排序
if (hi<=lo) return;
int mid=lo+(hi-lo)/2;
sort(alomid);
sort(amid+1hi);
merge(alomidhi);
}
当你走到这里的时候,你if没有加{} 而你定义的 又是void 当你执行到return 会直接跳出这个方法的``` int mid=lo+(hi-lo)/2; sort(alomid); sort(amid+1hi); merge(alomidhi);
这写代码应该不会执行的吧
解决方案四:
return 回到你调用这个方法的地方
时间: 2024-11-08 17:44:13