zoukankan      html  css  js  c++  java
  • 递归经典问题详解

    1 递归需要满足的两个条件:

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

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

    2 递归经典例子:

    (1) 阶乘

    n!=n*(n-1)*(n-2)*...1(n>0)

    int recursive(int n)
    {
        int result=0;
        if(n==1)
        return 1;
        result=n*recursive(n-1);
        return result;
    }
    
    (2) 汉诺塔问题

    void  hanoi(int n,char a,char b,char c)
    {
        if(n==1)
         cout<<" move disk "<<n<<" from "<<a<<" to "<<c<<endl;
       else
     {  hanoi(n-1,a,c,b);
        cout<<" move disk "<<n<<" from "<<a<<" to "<<c<<endl;
        hanoi(n-1,b,a,c);
     }
    
    }
    
    
    (3)全排列问题

    n个不同元素中任取mm≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

      如1,2,3三个元素的全排列为:

      1,2,3

      1,3,2

      2,1,3

      2,3,1

      3,1,2

      3,2,1 

    void CalAllPermutation(string str,int from,int to)
    {
        if(to<0)
        return ;
        if(from==to)
        {
        for(char& m:str)
        cout<<m;
        cout<<endl;
        }
        else
        {
            for(int j=from;j<=to;j++)
            {
                swap(str[j],str[from]);
                CalAllPermutation(str,from+1,to);
                swap(str[j],str[from]);
            }
        }
    }
    (4)裴波拉契数列

    long Fib(int n)
    {
        if(n==0)
        return 0;
          if(n==1)
        return 1;
        if(n>1)
        return Fib(n-1)+Fib(n-2);
        
    };






  • 相关阅读:
    单分发器
    Python 虚拟环境
    $modal
    memoization
    directive例子2
    UI-Router
    angular-translate
    directive例子1
    FileInputStream/FileOutputStream的应用
    自定义readLine
  • 原文地址:https://www.cnblogs.com/muyangshaonian/p/9650539.html
Copyright © 2011-2022 走看看