java中的递归方法
2015-06-11 12:15
330 查看
一、含义
递归算法是一种直接或间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
二、例子
99乘法表的例子
1:普通实现99乘法表太简单,是个程序员都会,实现如下:
2:用递归方式实现 99乘法表
代码如下:
递归的方式调用图示:
每一个方法的调用都会产生一个栈帧,压入到方法栈,当递归调用的时候,方法栈中栈帧的图示和上图类似。
去掉方法中栈帧的引用关系更加直观:如下图所示:
简化掉相应的方法调用最后执行情况如上图所示,注意 i 一直在变 j每次都是从1开始 然后递增到和i相等。
这样上图依次出栈后就得到了 99 乘法表:
总结:
嵌套for循环 和 用递归实现 的比较:
栈 主要是用来存放栈帧的,每执行一个方法就会出现压栈操作,所以采用递归的时候产生的栈帧比较多,递归就会影响到内存,非常消耗内存,而使用for循环就执行了一个方法,压入栈帧一次,只存在一个栈帧,所以比较节省内存。
递归算法是一种直接或间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
二、例子
99乘法表的例子
1:普通实现99乘法表太简单,是个程序员都会,实现如下:
代码如下:
每一个方法的调用都会产生一个栈帧,压入到方法栈,当递归调用的时候,方法栈中栈帧的图示和上图类似。
去掉方法中栈帧的引用关系更加直观:如下图所示:
简化掉相应的方法调用最后执行情况如上图所示,注意 i 一直在变 j每次都是从1开始 然后递增到和i相等。
这样上图依次出栈后就得到了 99 乘法表:
总结:
嵌套for循环 和 用递归实现 的比较:
栈 主要是用来存放栈帧的,每执行一个方法就会出现压栈操作,所以采用递归的时候产生的栈帧比较多,递归就会影响到内存,非常消耗内存,而使用for循环就执行了一个方法,压入栈帧一次,只存在一个栈帧,所以比较节省内存。
相关文章推荐
- java dom、sax解析xml
- R.java文件中的资源在Activity中得不到引用的问题
- 怎么在eclipse中导入一个maven项目
- 深入理解 Java中的 流 (Stream)
- Java构造和解析Json数据的两种方法详解一
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- java loop demo
- Java中的泛型方法
- 一个倒计时页面用javascrpt
- Java中使用Groovy的三种方式
- java学习之MVC模型(二)
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- java学习笔记(八)—— extends and override
- Java中Void占位符的测试及个人理解
- java虚拟机
- AdaBoost的java实现
- 【转载】eclipse调试arm裸机程序
- java处理json的工具类
- Struts2中动态方法调用
- Java多线程系列--“JUC锁”01之 框架