递推
一、定义
递推法:每一项都和他前面的若干项由一定的关联时,可以通过其前面若干项得出某项的数据的方法。关键是要找到递推式。这种处理问题的方法能使复杂运算化为若干步重复的简单运算,充分发挥出计算机擅长于重复处理的特点。 递推算法避开了求通项公式的麻烦,把一个复杂的问题的求解,分解成了连续的若干步简单运算。一般说来,可以将递推算法看成是一种特殊的迭代算法。
二、递推典型关系
1、Fibonacci数列
问题:有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?
递推式:
F(x) = F(x - 1) + F(x - 2)
边界条件:
F(0) = 0,F(1) = 1
2、Hanoi塔问题
问题:Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c组成。开始时,这n个圆盘由大到小依次套在a柱上。
![](https://i-blog.csdnimg.cn/blog_migrate/b812f48a39b813b2705fa1b8ac3597f1.png#pic_center)
递推式:
h(n) = 2 * h(n - 1) + 1
边界条件:
h(1) = 1
3、平面分割问题
问题:设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。
![](https://i-blog.csdnimg.cn/blog_migrate/4cc834fbdb64b75524191d385d775623.png#pic_center)
递推式:
a(n) = a(n – 1) + 2 * (n - 1)
边界条件:
a(0) = 1
4、Catalan数
Catalan数首先是由Euler在精确计算对凸n边形的不同的对角三角形剖分的个数问题时得到的,它经常出现在组合计数问题中。
问题:在一个凸n边形中,通过不相交于n边形内部的对角线,把n边形拆分成若干三角形,不同的拆分数目用h(n)表示,h(n)即为Catalan数。例如五边形有如下五种拆分方案,故h5=5。求对于一个任意的凸n边形相应的hn。
![](https://i-blog.csdnimg.cn/blog_migrate/a2ec66cac8f5f247814e0d7ba9fa66e1.png#pic_center)
![](https://i-blog.csdnimg.cn/blog_migrate/c2ebbeeda54203763f6f6c0d195d36ee.png#pic_center)
递推式:
∑
i
=
2
n
−
1
C
i
C
n
−
i
+
1
\sum_{i = 2}^{n - 1}C_{i}^{}C_{n - i + 1}^{}
∑i=2n−1CiCn−i+1
5、第二类Stirling数
n个有区别的球放到m个相同的盒子中,要求无一空盒,其不同的方案数用S(n,m)表示,称为第二类Stirling数。
递推式:
s(n + 1, m) = s(n, m – 1) + m * s(n, m)
三、总结
通过上面对五种典型的递推关系解决题目,对待递推的题目,要具体情况具体分析,通过找到某状态与其前面状态的联系,建立相应的递推关系。