1.递归实现n!
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int fun(int n);
5 int main(int argc, const char *argv[])
6 {
7 int n;
8 printf("please enter n:");
9 scanf("%d",&n);
10 if(n<1)
11 printf("enter error\n");
12 else
13 {
14 int s=fun(n);
15 printf("%d!=%d\n",n,s);
16 }
17 return 0;
18 }
19 int fun(int n)
20 {
21 if(n==0)
22 return 1;
23 else
24 return n*fun(n-1);
25 }
运行结果:
2.递归实现0-n的和
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int fun(int n);
5 int main(int argc, const char *argv[])
6 {
7 int n;
8 printf("please enter n:");
9 scanf("%d",&n);
10 if(n<0)
11 printf("enter error\n");
12 else
13 {
14 int sum=fun(n);
15 printf("sum=%d\n",sum);
16 }
17 return 0;
18 }
19 int fun(int n)
20 {
21 if(n==0)
22 return 0;
23 else
24 return n+fun(n-1);
25 }
运行结果:
3.递归实现斐波那契数列
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int fun(int n);
5 int main(int argc, const char *argv[])
6 {
7 int n;
8 printf("please enter n:");
9 scanf("%d",&n);
10 int s=fun(n);
11 printf("sum=%d\n",s);
12 return 0;
13 }
14 int fun(int n)
15 {
16 if(n<=0)
17 {
18 printf("enter error\n");
19 return -1;
20 }
21 else if(n==1||n==2)
22 return 1;
23 else
24 return fun(n-1)+fun(n-2);
25 }
运行结果:
4.递归实现二进制转换
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int rev(int num);
5 int main(int argc, const char *argv[])
6 {
7 int num;
8 printf("please enter num:");
9 scanf("%d",&num);
10 rev(num);
11 puts("");
12 return 0;
13 }
14 int rev(int num)
15 {
16 if(num==0)
17 return 0;
18 else
19 {
20 rev(num/2);
21 printf("%d",num%2);
22 }
23 }
运行结果:
5.递归实现计算各个位数字之和
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int fun(int num);
5 int main(int argc, const char *argv[])
6 {
7 int num;
8 printf("please enter num:");
9 scanf("%d",&num);
10 int s=fun(num);
11 printf("sum=%d\n",s);
12 return 0;
13 }
14 int fun(int num)
15 {
16 if(num==0)
17 return 0;
18 else
19 return num%10+fun(num/10);
20 }
运行结果:
6.递归实现计算各个位数字的乘积
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int fun(int n);
5 int main(int argc, const char *argv[])
6 {
7 int n;
8 printf("please enter n:");
9 scanf("%d",&n);
10 if(n==0)
11 printf("%d",n);
12 else
13 {
14 int s=fun(n);
15 printf("sum=%d\n",s);
16 }
17 return 0;
18 }
19 int fun(int n)
20 {
21 if(n>=0&&n<=9)
22 return n;
23 else
24 return n%10*fun(n/10);
25 }
运行结果:
7.递归实现计算单词逆置
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 void rev(char *i,char *j);
5 int main(int argc, const char *argv[])
6 {
7 char str[40]="";
8 printf("please enter str:");
9 gets(str);
10 //单词计数
11 int num=0,word=0;
12 char c;
13 for(int i=0;(c=str[i])!='\0';i++)
14 {
15 if(c==' ')
16 word=0;
17 else if(word==0)
18 {
19 word=1;
20 num++;
21 }
22 }
23 printf("word num=%d\n",num);
24 //单词逆置
25 char *end=str;
26 rev(str,str+strlen(str)-1);
27 while(*end!='\0')
28 {
29 char *start=end;
30 while(*end!=' '&&*end!='\0')
31 end++;
32 rev(start,end-1);//单词逆置
33 if(*end!='\0')
34 end++;
35 }
36 printf("%s",str);
37 puts("");
38 return 0;
39 }
40 void rev(char *i,char *j)
41 {
42 while(i<j)
43 {
44 char t=*i;*i=*j;*j=t;
45 i++;j--;
46 }
47 }
运行结果: