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 圈.在 ...
随机推荐
- Android Training精要(六)如何防止Bitmap对象出现OOM
1.使用AsyncTask異步加載bitmap圖片避免OOM: class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> ...
- applicationDefaultJvmArgs:
server.context-path=/HelloMultiServlet server.port=8080 applicationDefaultJvmArgs: [ "-agentlib ...
- Lua和Javascript差异对比
Lua模拟器js方案 1.语法级模拟lua与js语言差异 1.1注释 js 为//,lua为--. 1.2变量js利用val来声明全局变量不存在局部变量,lua则不需要直接定位则为全局变量,local ...
- 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)
第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...
- pcDuino汉化方法
1,打开终端:2,在终端输入命令 sudo apt-get update 更新一下软件源3, 输入命令下载中文支持包 sudo apt-get install language-pack-gnome- ...
- 基于mongoDB的capped collection的性能优化
MonitorLogging改造(消息接入) 改造前架构: 可以看出原来的流程中,大量业务分析,业务接入耦合在web服务层.大量操作,导致线程线性的挂起线程. 改造后: 将业务通讯抽象成为Monito ...
- java基于xml配置的通用excel单表数据导入组件(三、负责数据转换处理的类)
package xxxxxxx.manage.importexcel; import java.util.Map; import java.util.logging.Logger; import xx ...
- 使用Eclipse构建GeoTools项目
转自:http://hi.baidu.com/liushuigs/item/a62969e6667f9815585dd8b1 由于GeoTools是原本是使用Maven构建的,所以,不能直接将工程导入 ...
- 作品第一课----循环改变DIV颜色
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ASP.NET 路由
URL 模式可以包含文本值和变量占位符(也称为“URL 参数”). 文本和占位符位于由斜杠 (/) 字符分隔的 URL 段中. 当生成请求时,URL 分析为段和占位符,变量值提供给请求处理程序. ...