目录
1.完成一个递归程序,倒置字符数组。并打印实现过程递归逻辑为:当字符长度等于1时,直接返回否则,调换首尾两个字符,在递归地倒置字符数组的剩下部分(递归实现)
1.完成一个递归程序,倒置字符数组。并打印实现过程递归逻辑为:当字符长度等于1时,直接返回否则,调换首尾两个字符,在递归地倒置字符数组的剩下部分(递归实现)
#include<stdio.h>
void fun(char *a,int L,int R);
int main()
{
int n;
char a[100];
scanf("%d%s",&n,a);
fun(a,0,n-1);
printf("\n");
printf("%s",a);
return 0;
}
void fun(char *a,int L,int R)
{
char t;
if(L>=R)
return ;
t=a[L];
a[L]=a[R];
a[R]=t;
puts(a);
fun(a,L+1,R-1);
}
2.程将字符串s倒序输出,要求利用函数递归实现。
/***输入格式要求:"%s" 提示信息:"input your string:\n"
**输出格式要求:"%c"
程序运行的输入输出样例:
屏幕先输出提示信息:
input your string:
然后用户键盘输入:
abcdefg
最后屏幕输出:
gfedcba
#include<stdio.h>
#include<string.h>
void reverse(char s[]);
int main(void)
{
char s[100];
printf("input your string:\n");
scanf("%s", s);
reverse(s);
}
void reverse(char s[])
{
int lenth = strlen(s);//计算字符串长度 即结束符之前长度
if (lenth == 1)//设置出口,当长度等于1时,打印出第一个字符
printf("%c", s[0]);
else
{
reverse(s + 1);//比如字符串s="abcdefg\0",s+1="bcdefg\0"
printf("%c", s[0]);
}
}
3.阶乘
#include<stdio.h>
int fun(int k);
int main()
{
int k;
scanf("%d",&k);
printf("%d",fun(k));
return 0;
}
int fun(int k)
{
int sum=0;
if(k==1)
return 1;//出口
sum=k*fun(k-1);//调用递归
return sum;
}
4.奶牛问题(与兔子数列类似)
#include <stdio.h>
int fun(int n);
int main()
{
int n;
printf("please input the year:\n");
scanf("%d",&n);
printf("The number of the cow is %d",fun(n));
return 0;
}
int fun(int n)
{
if(n<=4)
return n;
return fun(n-1)+fun(n-3);
}
4.求两个组合数的和
#include<stdio.h>
int fun(int k,int n);
int main ()
{
int k,n;
scanf("%d%d",&k,&n);
printf("%d\n",fun(k,n));
return 0;
}
int fun(int k,int n)
{
if(k==0||k==n)
return 1;
return fun(k,n-1)+fun(k-1,n-1);
}
5.汉诺塔问题
#include<stdio.h>
void fun(int n,char a,char b,char c);
void move(int n,char a,char c);
int main ()
{
int n;
printf("please input the number of the pole:\n");
scanf("%d",&n);
fun(n,'a','b','c');//直接将字符传入
return 0;
}
void fun(int n,char a,char b,char c)
{
if(n==1)
move (n,a,c);//出口
else
{
fun(n-1,a,c,b);
move(n,a,c);
fun(n-1,b,a,c);//一般情况
}
}
void move(int n,char a,char c)
{
printf("移动第%2d个plate:%c-->%c\n",n,a,c);//进行移动操作
}
6.递归打印杨辉三角
#include<stdio.h>
int fun (int m,int n);
int main()
{
int i,j,n;
printf("Please input n:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=0;j<=n-i;j++)
printf(" ");//注意格式 两个空格
for(j=1;j<=i;j++)
printf("%4d",fun(i,j));//注意格式 调用递归函数
printf("\n");
}
return 0;
}
int fun (int m,int n)
{
if(n==1||m==n)//终止条件
return 1;
else
return fun(m-1,n-1)+fun(m-1,n);
}