递归算法

递归算法

递归就是自己调用自己

1.n的阶乘

代码:

  1 #include<stdio.h>

  2

  3 int fact(int n)

  4 {

  5     if(n<0)

  6     {

  7         printf("error!!!");

  8         return -1;

  9     }

 10     if(n==0)

 11         return 1;

 12     else

 13         return n*fact(n-1);

 14 }

 15

 16 void main()

 17 {

 18     int x=5;

 19     printf("%d!=%d\n",x,fact(x));

 20 }

2.斐波纳契数列

比如:011235

就是第三个数是前两个数的和

代码:

  1 #include<stdio.h>

  2

  3 int fib(int n)

  4 {

  5     if(n == 0)

  6         return 0;

  7     if(n == 1)

  8         return 1;

  9     if(n>1)

 10         return fib(n-1)+fib(n-2);

 11 }

 12

 13 void main()

 14 {

 15     int x;

 16     printf("please input a num:\n");

 17     scanf("%d",&x);

 18     printf("%d位是%d\n",x,fib(x));

 19 }

 

3.最大公约数

代码:

 1 #include<stdio.h>

  2

  3 int gcd(int m,int n)

  4 {

  5     if(m>n)

  6         gcd(m-n,n);

  7     else if(m<n)

  8         gcd(m,n-m);

  9     else

 10         return ;

 11 }

 12

 13 void main()

 14 {

 15     int a=4,b=6;

 16     printf("%d\n",gcd(a,b));

 17 }

 

4.颠倒的字符串

 1 #include<stdio.h>

  2

  3 int RevStr(char s[],int i)

  4 {

  5     int k;

  6     char ch=s[i];

  7     if(ch=='\0')

  8         return 0;

  9     else

 10     {

 11         k=RevStr(s,i+1);

 12         s[k]=ch;

 13         return k+1;

 14     }

 15 }

 16 void main()

 17 {

 18     char s[]={"hello world!"};

 19     printf("颠倒前:%s\n",s);

 20     RevStr(s,0);

 21     printf("颠倒后:%s\n",s);

 22 }

 

5.汉诺塔问题

  1 #include<stdio.h>

  2

  3 void move(char x,char y)

  4 {

  5     printf("%c--->%c\n",x,y);

  6 }

  7 void hanoi(int n,char one,char two,char three)

  8 {

  9     if(n==1)

 10         move(one,three);

 11     else

 12     {

 13         hanoi(n-1,one,three,two);

 14         move(one,three);

 15         hanoi(n-1,two,one,three);

 16     }

 17 }

 18 void main()

 19 {

 20     int n;

 21     printf("请输入圆盘的个数:\n");

 22     scanf("%d",&n);

 23     printf("移动的步骤如下:\n");

 24     hanoi(n,'A','B','C');

 25 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值