递归的核心思路只有一句话,就是 使用自己来定义自己。在很多编程实践中,递归已经是家常便饭了。比如文件遍历操作,分形图的计算等等。
这篇小结不描述具体的问题,只抽象一般的思考方法。可以有意识的用这种思想方法去实践模型问题。很有裨益。
一.比较典型的递归数学问题
1.汉诺塔模型:将n个圆盘以从大到小的方式放在柱子A上,要求通过柱子C,将所有的盘移动到柱子B上。
规则:移动的时候一次只能移动最上端的圆盘。
小圆盘上面不能放大圆盘。
2.阶乘问题:n!
3.求和问题:s(n) = s(n-1) + n
4. 斐波那契数列问题:f(n) = f(n-1) + f(n-2)
5.杨辉三角与分形图
二.递归的首要意识:寻找递归结构
递归往往是解决复杂问题时候,抛开真实时间,寻求数学途径的方法。发现一个问题是否可以归结为递归。保持一个意识很重要:是否能将复杂的问题转化为简单的同类问题。——也就是说,是否可以用自己来解释自己。
对于已经的典型问题基本可以很快进行总结。但实际操作中有很多现实问题,需要首先注意分解问题的结构。不同的角度来分解结构,得到的逻辑可能就完全不一样。
1.提出假设:用n来描述当前的问题,则用n-1是否可以表述n规模的问题。
2.小规模论证。从基数1开始,验证解析式是否正确。
3.必要情况下,使用数学归纳法。
三.归纳
1.从n层的整体问题中隐去部分问题。
2.判断剩余部分是否是n-1层的问题。