深入理解
2016-05-05 23:34
232 查看
深入理解递归
递归的思想
以此类推是递归的基本思想。具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。
递归的两个条件
可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用)
存在一种简单情境,可以使递归在简单情境下退出。(递归出口)
递归算法的一般形式:
我们根据递推公式可以轻松的写出其递归函数:
递归的过程
在求解6的阶乘时,递归过程如下所示。我们会惊奇的发现这个过程和栈的工作原理一致对,递归调用就是通过栈这种数据结构完成的。整个过程实际上就是一个栈的入栈和出栈问题。然而我们并不需要关心这个栈的实现,这个过程是由系统来完成的。
那么递归中的“递”就是入栈,递进;“归”就是出栈,回归。
我们可以通过一个更简单的程序来模拟递进和回归的过程:
递归的例子
斐波那契数列斐波那契数列的递推公式:Fib(n)=Fib(n-1)+Fib(n-2),指的是如下所示的数列:
1、1、2、3、5、8、13、21.....
按照其递推公式写出的递归函数如下:
归并排序
归并排序也是递归的典型应用,其思想:将序列分为若干有序序列(开始为单个记录),两个相邻有序的序列合并成一个有序的序列,以此类推,直到整个序列有序。
分类: 算法分析
相关文章推荐
- Spring 学习笔记(一)
- linux usb安装介质制作 create-a-usb-stick-on-windows
- java中的名字重用
- "USDToBaseCurrencyRate"拿什么拯救我的智商...
- Spring的构造请求类 SimpleClientHttpRequestFactory
- java单例模式
- 学习View第三步
- java.sql.SQLException: QueryRunner requires a DataSource to be invoked in this way, or a Connection
- 搭建服务器上的GIT并实现自动同步到站点目录(www)
- mysql 常用基本命令
- exclude kernel or other packages from getting updated
- ssh原理[转]
- poj 1321 棋盘问题 - DFS 2251 Dungeon Master - BFS
- Java序列化技术
- 59. Divide Two Integers
- 避免头文件重复包含
- linux命令(20):rm命令
- 软件框架
- 基于icamera usb2.0的视频采集系统之mt9m001c12stc测评
- css overfloat:auto清除float 自动撑开