递归算法
递归就是自己调用自己
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.斐波纳契数列
比如:0,1,1,2,3,5
就是第三个数是前两个数的和
代码:
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 }