函数递归的简单实例

// 递归调用add函数实现1+2+3。。。。+100的值

// 函数实现过程,i=1,累加i,并且判断i的值是否等于100,如果等于,则直接返回累加结果s

//如果不满足i等于100,则执行 return add(++i); i自增,调用add(2),再将s加上2,这样s一直加到100 ,再返回s的最终结果。

【例1】

#include <stdio.h>
int add(int i);
int main()
{
int s,i=1;  
 s=add(i);
printf("%d\n",s);
_getch();   //暂停屏幕  
}
int add(int i)
{
static int s=0;  //为了保证每次调用 add()函数时,将s赋值为0,所以应加上static 
 s=s+i;
 if(i==100) return s;
 return add(++i);  
      }




// 求fibnbcci数列

【例2】

 

// 求fibnbcci数列

【例2】

 #include <stdio.h>

      int fun(int n);

       int main()

      {  

       int n;

       scanf("%d",&n);

       printf("%d\n",fun(n));

       _getch();

      } 



  int  fun(int n)

  {

 long f;

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

  else  f=fun(n-1)+fun(n-2);

  return f;
}

【例3】求两数的最大公约数

//算法:1.求p=m%n

        2.若p=0,则n为所求值

        3.若p!=0,则将n赋值给m,将m%n赋值给n

        4.直到m%n=0为止

 #include <stdio.h>

  #include <stdlib.h>

 int gys(int m,int n);  //公约数 函数声明 

 int gbs(int m,int n);   //公倍数 函数声明 

 int main()

     {

      int m,n,p,q;

      scanf("%d%d",&m,&n); #xa0;

     p=gys(m,n); //调用函数 

      printf("最大公约数:%d \n",p);

     q=gbs(m,n);

       printf("最小公倍数:%d\n",q);

     return 0;
 }

         

   int gys(int m,int n)  

   {

   int p;  //p保存最大公约数

  if(m%n==0) //如果能除尽,则n为m,n的最大公约数

    p=n;

    else

   p=gys(n,m%n);  //不能除尽,则再次调用gys函数,此时,n的值传递给m,m%n的值传递给n,直到m%n等于0

   return p;   //返回p

    return 0;

       }

       

       int gbs(int m,int n)   //最小公倍数

       {

           int k;

           k=gys(m,n);    //调用最大公约数的结果

            m=m/k;     //将m除以最大公约数

            n=n/k;    //n除以最小公倍数

return k*m*n;   //返回k*m*n,就是最小公倍数

           }


【例子4】 汉诺塔问题

//具体过程不懂得,可以百度吧,小编这就不写了,打字好累!


  

1.     #include<stdio.h>

2.     static int count=0;

3.     void hanoi(char a,char b,char c,int n)

4.     {

5.     if(n==1)

6.     {

7.     printf("%c->%c\n",a,c);

8.     count++;

9.     }

10. else

11. {

12. hanoi(a,c,b,n-1);

13. printf("%c->%c\n",a,c);

14. count++;

15. hanoi(b,a,c,n-1);

16. }

17. }

18. void main()

19. {

20. int n;

21. scanf("%d",&n);

22. hanoi('A','B','C',n);

23. printf("共%d次\n",count);

24. }

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值