關於遞歸的幾個小例子


遞歸本質上還是一種函數的嵌套調用。

底下是幾個關於遞歸的一些常見應用的小例子。

1.斐波那契數列,遞歸在遞推上的應用。

/*遞推用遞歸來求解時,主要找最后一步怎么來求解和邊界條件,即第一步*/

1 int fibonacci(int n)
2    {
3        if(n==1||n==2)
4            return 1;
5        else
6            return (n+fibonacci(n-1)+fibonacci(n-2));
7    }

2.十進制轉二進制

 1 void convert(int n)
 2  {
 3      int m;
 4      if(n!=0)//當等於0時n為1或者0,直接輸出 
 5      {
 6      
 7          convert(n/2);
 8          
 9          printf("%d",n%2);//輸出放在遞歸調用之后,因為輸出是反向的 
10          
11      }
12      else
13      printf("%d",n);
14  }

3.漢諾塔問題

 1 void hanoi(int n,char x,char y,char z)
 2 {
 3     /*第一次直接從x移到z
 4       第二次先從x移到y,再從x移到z,最后從y移到z
 5       第三次先將前兩個借助z從x移到y,再將x移到z,在把y上的兩個借助x移到z
 6       ......
 7       類推。    */
 8     if(n==1)
 9         printf("%c-->%c\n",x,z);
10     else
11     {
12         hanoi(n-1,x,z,y);
13         printf("%c-->%c\n",x,z);
14         hanoi(n-1,y,x,z);
15     }
16 }

 4.從(0,0)到(m,n)走只能向上或者向右走,一次只能走一步有多少種走法 (利用遞歸把問題化為縮小了的同類問題的子問題)

 1 int fun(int m,int n)
 2 {
 3         if(m==0&&n==0)
 4         {
 5                 return 0;
 6         }
 7         else if(m==0||n==0)
 8                 return 1;
 9         else
10                 return (fun(m-1,n)+fun(m,n-1));
11 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM