Java递归流程
递归二字顾名思义就是:递过去,归回来、所以我索性叫它做有借有还吧。
下面的例子由c而来:
public class Main {
public static void main(String[] args) {
fun(1);
}
public static void fun(int n) {
System.out.printf("1-lexe:%d \n", n); //#1
if (n < 3)
fun(n + 1);
System.out.printf("2-lexe:%d \n", n); //#2
}
}
输出的结果如下:
1-lexe:1
1-lexe:2
1-lexe:3
2-lexe:3
2-lexe:2
2-lexe:1
流程解读:
首先, main() 调用了函数 fun(1) ,于是fun(1)中形参 n 的值是 1, 故打印语句 #1 输出了:1-lexe:1 。
然后,由于 n < 3 ,( 第 2 级 )的fun(n+1)被调用. 此时n+1=2,故打印语句 #1 输出了:1-lexe:2。
然后,由于 n < 3 ,( 第 3 级 )的fun(n+1)被调用. 此时n+1=3,故打印语句 #1 输出了:1-lexe:3。
由于此时,n=3 , 不再执行if语句。
然后执行 #2 语句 , 因为此时 n 的值为 3 , 故打印语句 #2 输出了: 2-lexe:3 。 ---------------------------这时完成了一个“递过去”
此时函数调用完成
现在函数需要“归回来” , 回到最后一次调用函数的地方 , 即 n+1=2 的地方 , 故打印语句 #2 输出了:2-lexe:2。
再返回上一级调用的地方 , n =1 的地方 , 故打印语句 #2 输出了:2-lexe:1。-----------------------------完成了一个“归回来“
其实他的”归回来“的切入点就是函数的调用点 ,获取此处的参数值 , 一级一级的往外突围就出来了。
下面附上一个运算的递归流程:http://www.cnblogs.com/OldZhao/p/5062582.html
Java递归流程的更多相关文章
- Java的流程控制和C++的异同
Java的流程控制和C++基本相似 现将不同的地方总结一下,以便快速掌握. Java的特殊流程控制的特殊部分: 1.顺序结构 -- 没有区别 2.分之结构 -- 没有区别 3.循环结构 1> ...
- Java递归列出目录下全部文件
Java递归列出目录下全部文件 /** * 列出指定目录的全部内容 * */ import java.io.*; class hello{ public static void main(String ...
- Java 递归调用 recursive 给一个参数 返回一大堆
需求: 需要组装成对象多层嵌套式的 json字符串; 想到使用 递归来完成这个多层嵌套: 憋了四个小时,终于写出来了; 先看效果: 数据库中的数据: 拼装后的效果: [ EmpVO{ ename='孙 ...
- JAVA 递归实现从n个数中选取m个数的所有组合
这周Java课程有个小作业:Java递归实现从n个数中选取m个数的所有组合 代码如下: //其中 n 取 1,2,3,4,5 五个数, m 取 3 package javaText; public c ...
- JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程
JNI/NDK Java调用C/C++前言 通过第三篇文章讲解在实际的开发过程中Java层调用C/C++层的处理流程.其实我们在很大的业务里也需要C/C+ +层去调用Java层,这两层之间的相互调用 ...
- Java 异常处理流程
Java 异常处理流程 ============== End
- JAVA递归、非递归遍历二叉树(转)
原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...
- java自学-流程控制语句
一件事情从开始到结束,需要先做什么,再做什么,最后再怎么做,这段过程就是一个流程.程序逻辑处理也是一个流程,java中有专门的流程控制语句,主要分为这几种:顺序,判断,选择,循环. 1.顺序流程 顺 ...
- Java学习笔记八:Java的流程控制语句之循环语句
Java的流程控制语句之循环语句 一:Java循环语句之while: 生活中,有些时候为了完成任务,需要重复的进行某些动作.如参加 10000 米长跑,需要绕 400 米的赛道反复的跑 25 圈.在 ...
随机推荐
- java向文件写数据的3种方式
下边列举出了三种向文件中写入数据的方式,当然还有其他方式,帮助自己理解文件写入类的继承关系.类的关系: file->fileoutputstream->outputstreamWriter ...
- ASP.NET多用户操作相同互斥的对象
[一篮饭特稀原创,转载请注明出自http://www.cnblogs.com/wanghafan/p/3574154.html ] 现象:公有静态变量不可用于ASP.NET多用户操作,否则该变量会被多 ...
- SPRING IN ACTION 第4版笔记-第二章WIRING BEANS-008-在XML配置文件中引入JAVA配置文件 <import> 、<bean>
一.在xml中引入xml,用<import> <?xml version="1.0" encoding="UTF-8"?> <be ...
- 【CF】135 Div2 Choosing Capital for Treeland
树形结构,挺有意思的题目.不难. /* 219D */ #include <iostream> #include <string> #include <map> # ...
- 全球AI界最值得关注的十位科学家
全球AI界最值得关注的十位科学家 我们可以看到AI已经从象牙塔里的高冷研究,逐步转换为科技公司.互联网公司的最核心竞争力.AI代表了这时代人类的前沿智慧,也正达到一种科学的极致. 这两天在美国加利 ...
- bzoj1799
这是一道比较难的数位dp 因为逐位统计好像无法处理数位和整除原数的 但是有了刚才的bzoj1072的经验,我们能做的是逐位处理被一个数d整除的方案 不难想到先穷举数位和now,now最大也就162,可 ...
- 一起啃PRML - 1.2.1 Probability densities 概率密度
一起啃PRML - 1.2.1 Probability densities @copyright 转载请注明出处 http://www.cnblogs.com/chxer/ 我们之前一直在讨论“谁取到 ...
- 【转】重载(overload),覆盖(override),隐藏(hide)的区别
原文网址:http://www.cppblog.com/zgysx/archive/2007/03/12/19662.html 写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖 ...
- (转载)Total Commander 常用快捷键(并附快捷键大全)
(转载)http://blog.chinaunix.net/uid-532511-id-3051990.html Total Commander 常用快捷键 喜欢用Total Commander的人, ...
- JavaScript向表格中添加按钮和文本输入框
例子: <?php ?> <html> <head> <meta http-equiv="Content-Type" content=&q ...