目录
- 【概述】
- 一、递归
- 组成部分
- 间接与直接(递归)
- 二、递推
- 组成部分
- 逆推与顺推
- 三、递推与递归的比较
- 【应用】
- 五种典型的递推关系
【概述】
一、递归
递归算法:一种通过重复将问题分解为同类的子问题而解决问题的方法。
适用问题:解决结构相似的问题。即:原问题所分解成的子问题和原问题解决方法相同
特点:反复执行、结束反复执行的条件
缺点:占用大量内存且不易阅读
组成部分
递归边界条件(递归终止条件):确定递归到何时终止或有解的情况。
递归模式(递归体):大问题是如何分解为小问题的。
注:递归终止条件通常就是得出最小问题的解,并返回给他的调用者;
间接与直接(递归)
1.直接递归调用:就是在函数f中直接调用函数f本身
2.间接递归调用:就是在函数f1中调用另外一个函数f2,而该函数f2又调用了函数f1
二、递推
递推关系:给定一个序列,相邻的数据项间的关系,即递推关系。
递推算法:指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果。
特点:避开了求通项公式的麻烦,把一个复杂问题的求解,分解成了连续的若干简单运算。一般说来,可以将递推算法看成是一种特殊的迭代算法。
注:在我们实际解题中,题目不会直接给出递推关系式,而是需要通过分析各种状态,找出递推关系式。
组成部分
1、初始状态(问题给出或分析得到);
2、用固定的递推关系式来表示其它各个状态。
逆推与顺推
顺推:从已知条件出发逐步推到问题结果
逆推:从问题出发逐步推到已知条件
三、递推与递归的比较
相对于递归算法,递推算法免除了数据进出栈的过程,也就是说,不需要函数不断的向边界值靠拢,而直接从边界出发,直到求出函数值。
【应用】
五种典型的递推关系
- Fibonacci数列
- Hanoi塔问题
- 平面分割问题
- Catalan数
- 第二类Stirling数