关于递归的几个小例子

递归本质上还是一种函数的嵌套调用。

底下是几个关于递归的一些常见应用的小例子。

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 }

 

posted @ 2017-11-12 16:58  快第三个十年  阅读(5741)  评论(0编辑  收藏  举报