关于递归

递归的核心思路只有一句话,就是 使用自己来定义自己。在很多编程实践中,递归已经是家常便饭了。比如文件遍历操作,分形图的计算等等。

这篇小结不描述具体的问题,只抽象一般的思考方法。可以有意识的用这种思想方法去实践模型问题。很有裨益。


一.比较典型的递归数学问题

     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层的问题。

     

你可能感兴趣的:(关于递归)