递归

来源:互联网 发布:网易邮箱大师mac版 编辑:程序博客网 时间:2024/06/06 03:21

递归就是将一个大问题逐渐分解,变成越来越小的的问题,直到最终可以被解决的程度

递归要点:(1)出口,就是程序结束的条件

                  (2)递归的调用过程

举例1:求斐波那契数列的第20项值是多少?(1,1,2,3,5……)

                  (1)出口:n==0||n==1,f[n]=1;

                  (2)过程 :即 F(n)=F(n-1)+F(n-2);

核心代码实现 如下

int f(int n){

if(n==0||n==1)

return 1;

else

return f(n-1)+f(n-2);

}

举例2

//全排列inline void Swap(int &a,int &b){int temp=a;a=b;b=temp;}void Perm(int list[],int k,int m){if (k == m-1) {for(int i=0;i<m;i++){printf("%d",list[i]);}printf("n");}else{for(int i=k;i<m;i++){Swap(list[k],list[i]); Perm(list,k+1,m);Swap(list[k],list[i]); }}}