您的位置:首页 > 其它

递归的故事

2016-03-27 00:00 218 查看
                                         
递归及递归算法

 

       给你讲个故事:古之欲明明德于天下者,先治其国;欲治其国者,先齐其家;欲齐

其家者,先修其身;欲修其身者,先正其心;欲正其心者,先诚其意;欲诚其意者,先

致其知,致知在格物。物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,

身修而后家齐,家齐而后国治,国治而后天下平。

 

                 -------这就是早在中国的上千年前老祖宗的递归思想。

 

 

   1,递归:递归分两步,递和归;通俗的说也就是自己调用自己,从下面这幅图就可以

看出,照片中的人拿到一直都是和自己完全一样的照片,那什么是递和归,又有什么特

点,为什么要递归呢?

                              


     递归之所以现在还存在是因为递归可以产生无限循环体,也就是说有可能产生100层

也可能10000层for循环。例如对于一个字符串进行全排列,字符串长度不定,那么如果

你用循环来实现,你会发现你根本写不出来,这个时候就要调用递归,而且在递归模型

里面还可以使用分支递归,例如for循环与递归嵌套,或者这节枚举几个递归步进表达

式,每一个形成一个递归。

 

  

2,递归(recursion):程序调用自身的编程技巧。

  

递归必须满足2个条件:

    1)有反复执行的过程(调用自身)

    2)有跳出反复执行过程的条件(递归出口)

  3,递归一般用于解决三类问题:
   (1)数据的定义是按递归定义的。(Fibonacci函数,n的阶乘)
   (2)问题解法按递归实现。(回溯)
   (3)数据的结构形式是按递归定义的。(二叉树的遍历,图的搜索)
 







 4,什么是递归函数(recursive function)  

 

     递归函数即自调用函数,在函数体内部直接或间接地自己调用自己,即函数的嵌套调

用是函数本身。

 

例如,下面的程序为求n!:   

      

<span style="font-size:24px;">long fact(int n)
    {
     if(n==1)
     return 1;
     return fact(n-1)*n; //出现函数自调用
    }
</span>


经典的斐波那契数列:用线性递归实现Fibonacci函数,程序如下所示:

<span style="font-size:24px;"><span style="font-size:24px;">1 int FibonacciRecursive(int n)
2 {
3     if( n < 2)
4        return n;
5     return (FibonacciRecursive(n-1)+FibonacciRecursive(n-2));
6 }
</span>
</span>


 

   

 5,小结:

   

     递归最重要最重要的思想就是:分解,把大问题分解成小问题,把规模大的问题转

化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问

题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题

的函数必须有明显的结束条件,这样就不会产生无限递归的现象了。

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: