递归的故事


                                          递归及递归算法

 



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


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


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


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

 

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

 

 

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


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


点,为什么要递归呢?

                              


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


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


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


里面还可以使用分支递归,例如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,小结:

   

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


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


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


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

 

 

 

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值