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

问题描述

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-09-08 17:44:42

java递归 if() return返回到哪里?的相关文章

&amp;amp;lt;递归&amp;amp;gt;return返回值中 &amp;amp;amp;&amp;amp;amp; 是什么用法?

问题描述 <递归>return返回值中 && 是什么用法? 首先,本人新手,请大神解决基础题一题. 如题: 用递归判断数列是否为递增,答案如下: bool fun(int a[], int n) { if(n= =1) return true; if( n= =2 ) return a[n-1] >= a[n-2]; return fun( a,n-1) && ( a[n-1] >= a[n-2] );_ } 最后一句中的&&是个什么

java类的问题-java递归原理求高人解惑

问题描述 java递归原理求高人解惑 int i=1;int Test(int n){ System.out.println(""*****************""+(i++)); int result =0; if(n==1) return 1; result = Test(n-1)*n; System.out.println(result+"" ""+n); return result;}我进行调试,比如n=8,只打印

java 递归深入理解_java

一.递归函数,通俗的说就是函数本身自己调用自己... 如:n!=n(n-1)! 你定义函数f(n)=nf(n-1) 而f(n-1)又是这个定义的函数..这就是递归 二.为什么要用递归:递归的目的是简化程序设计,使程序易读 三.递归的弊端:虽然非递归函数效率高,但较难编程,可读性较差.递归函数的缺点是增加了系统开销,也就是说,每递归一次,栈内存就多占用一截 四.递归的条件:需有完成任务的语句,需满足递归的要求(减小而不是发散) 五.递归进阶: 1.用递归算n的阶乘:   分析:n!=n*(n-1)

Java递归遍历XML所有元素

做一个递归遍历XML的例子,为更为复杂的解析工作做基础. 目标:遍历所有的元素节点,并且取出来其中的值,结果打印到控制台. 源代码如下: 本程序依赖DOM4j包. import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.DocumentException; import org.dom4j.Element; import java.util.*; /** * Created by IntelliJ

php function用法如何递归及return和echo区别

 这篇文章主要介绍了php function用法如何递归及return和echo区别,需要的朋友可以参考下  代码如下: <?php  //模拟sql数据  $array = array(0=>'apple',1=>'banana',2=>'cat',3=>'dog',4=>'egg','5'=>'father');    //function 用法1  //arr 是传入的数据 $con 是条件  function f_1($arr,$con){  //这里的

JAVA关于重写和返回的问题

问题描述 JAVA关于重写和返回的问题 public class Item { public String id; public String name; public void setId(String id){ this.id=id; } public void setName(String name){ this.name=name; } public String getId(){ return id; } public String getName(){ return name; }

树形 递归-java 递归报错 求大神帮忙

问题描述 java 递归报错 求大神帮忙 private List<Post> getPostLower(List<Post> PostTops){ List<Post> postAll=new ArrayList<Post>(); // 上级 for(Post post:PostTops){ //查询到下级 List<Post> posts=basService.queryPostByParentId(post.getPostId()); //

java中如果需要返回多个值怎么办

Java中如果需要返回多个值怎么办 首先我们明确一下:java方法的返回值只有一个,但是返回值的类型不限 有一种编程语言可以返回多个值 Python,实例如下:  运行结果如下: [whuang@huangwei function2]$ ./function_dict02.py My name is  Walter My age is  23   在java中如何达到相同的目的呢? (1)把这多个返回值再封装成为对象 可以封装成为java bean,数组,ArrayList ,甚至Map 下面看

java类的问题-java类中的返回语句提取

问题描述 java类中的返回语句提取 interface Car{ String getName(); int getPrice(); int getQuan(); int getIndividualSales(); } class CarShop{ private int money_a=0; private int money_b=0; public void saleCar(Car car){ System.out.println("品牌"+car.getName()+"