一、什么是递归?
递归一次用于表示直接或间接的调用自身的算法。特别的,用函数自身给出定义的函数被称为递归函数 。
二、递归函数:
1、斐波那契函数:
- int fibonacci()
- {
- if(n<=2) return 1;
- return fibonacci(n-1)+fibonacci(n-2);
- }
一般用以下方法解fibonacci 函数:
- int fibonacci()
- {
- if(n<=2)return 1;
- else{
- int a=1,b=1,f;
- for(int i=3;i<=n;i++)
- {f=a+b;
- a=b;b=f;
- }
- return f ;
- }
用递归遍历,整棵树,每一次递归的过程中逐次寻找较大的数并把此节点赋给临时指针,最后返回临时指针即为最大节点。
- class Solution {
- public:
- /**
- * @param root the root of binary tree
- * @return the max node
- */
- int max=-10000;
- TreeNode* t;
- TreeNode* maxNode(TreeNode* root) {
- // Write your code here
- if(root==NULL)
- return NULL;
- if(root->val>max)
- {
- max=root->val;
- t=root;
- }
- maxNode(root->left);
- maxNode(root->right);
- return t;
- }
- };
基础步:当n=0,那n!=1,即f(0)=1
归纳步:当n!=0,那由阶乘的定义知n!=n*(n-1)!,即f(n)=n*f(n-1)
- int factorial(int n)
- {
- //功能:求数n的阶乘
- //输入:非负整数n
- //输出:n的阶乘的值
- //说明:以参数n-1递归调用自身直至n为0
- if(n==0) return 1;//基础步
- else
- {//归纳步
- return n*factorial(n-1);
- }
- }
1、在使用递归时,必须有一个明确的递归结束条件,作为递归的出口。
2、在递归过程中,系统为每层的返回点、局部量等开辟了栈来储存。递归次数过多容易溢出。