目录

  • 【概述】
  • 一、递归
  • 组成部分
  • 间接与直接(递归)
  • 二、递推
  • 组成部分
  • 逆推与顺推
  • 三、递推与递归的比较
  • 【应用】
  • 五种典型的递推关系



【概述】

一、递归

递归算法:一种通过重复将问题分解为同类的子问题而解决问题的方法。
适用问题:解决结构相似的问题。即:原问题所分解成的子问题和原问题解决方法相同
特点:反复执行、结束反复执行的条件
缺点:占用大量内存且不易阅读

组成部分

递归边界条件(递归终止条件):确定递归到何时终止或有解的情况。

递归模式(递归体):大问题是如何分解为小问题的。

:递归终止条件通常就是得出最小问题的解,并返回给他的调用者;

递推与递归 python 递推与递归程序分析_递归算法

间接与直接(递归)

1.直接递归调用:就是在函数f中直接调用函数f本身

递推与递归 python 递推与递归程序分析_递推与递归 python_02

2.间接递归调用:就是在函数f1中调用另外一个函数f2,而该函数f2又调用了函数f1

递推与递归 python 递推与递归程序分析_算法_03

二、递推

递推关系:给定一个序列,相邻的数据项间的关系,即递推关系。
递推算法:指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果。
特点:避开了求通项公式的麻烦,把一个复杂问题的求解,分解成了连续的若干简单运算。一般说来,可以将递推算法看成是一种特殊的迭代算法
:在我们实际解题中,题目不会直接给出递推关系式,而是需要通过分析各种状态,找出递推关系式。

组成部分

1、初始状态(问题给出或分析得到);
2、用固定的递推关系式来表示其它各个状态。

逆推与顺推

顺推:从已知条件出发逐步推到问题结果
逆推:从问题出发逐步推到已知条件

三、递推与递归的比较

相对于递归算法,递推算法免除了数据进出栈的过程,也就是说,不需要函数不断的向边界值靠拢,而直接从边界出发,直到求出函数值。

【应用】

五种典型的递推关系

  1. Fibonacci数列
  2. Hanoi塔问题
  3. 平面分割问题
  4. Catalan数
  5. 第二类Stirling数