递归算法总结

一、什么是递归?

递归一次用于表示直接或间接的调用自身的算法。特别的,用函数自身给出定义的函数被称为递归函数 。

二、递归函数:

1、斐波那契函数:

  1. int fibonacci()
  2. {  
  3. if(n<=2) return 1;  
  4. return fibonacci(n-1)+fibonacci(n-2); 
从这个函数可以看出,递归函数具有方便简洁的特点,但是其在运行过程中效率较低。

一般用以下方法解fibonacci 函数:

  1. int fibonacci()  
  2. {  
  3. if(n<=2)return 1;  
  4. else{  
  5. int a=1,b=1,f;  
  6. for(int i=3;i<=n;i++)  
  7. {f=a+b;  
  8. a=b;b=f;  
  9. }  
  10. return f ;  
  11. }  
2、二叉树的最大节点:

用递归遍历,整棵树,每一次递归的过程中逐次寻找较大的数并把此节点赋给临时指针,最后返回临时指针即为最大节点。

  1. class Solution {    
  2. public:    
  3.     /**  
  4.      * @param root the root of binary tree  
  5.      * @return the max node  
  6.      */    
  7.      int max=-10000;    
  8.      TreeNode* t;    
  9.      TreeNode* maxNode(TreeNode* root) {    
  10.         // Write your code here    
  11.         if(root==NULL)    
  12.             return NULL;    
  13.         if(root->val>max)    
  14.         {    
  15.             max=root->val;    
  16.             t=root;    
  17.         }    
  18.         maxNode(root->left);    
  19.         maxNode(root->right);    
  20.       return t;    
  21.     }    
  22. };
3、计算阶乘函数n!

基础步:当n=0,那n!=1,即f(0)=1

归纳步:当n!=0,那由阶乘的定义知n!=n*(n-1)!,即f(n)=n*f(n-1)

  1. int factorial(int n)    
  2. {    
  3.     //功能:求数n的阶乘    
  4.     //输入:非负整数n    
  5.     //输出:n的阶乘的值    
  6.     //说明:以参数n-1递归调用自身直至n为0    
  7.     
  8.     if(n==0) return 1;//基础步    
  9.     else    
  10.     {//归纳步    
  11.         return n*factorial(n-1);    
  12.     }    
三、递归算法解决问题的特点:

1、在使用递归时,必须有一个明确的递归结束条件,作为递归的出口。

2、在递归过程中,系统为每层的返回点、局部量等开辟了栈来储存。递归次数过多容易溢出。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值