1、编写一个函数,递归实现将参数字符串中的字符反向排列
不用递归思想
my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
int left = 0;
int right = my_strlen(str) - 1;
while (left < right)
{
char tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdefg";
reverse_string(arr);
printf("%s", arr);
return 0;
}
递归:
void reverse_string(char*str)
{
char tmp=*str; //1
int len=my_strlen(str);
*str=*(str+len-1); //2
*(str+len-1)='\0'; //3
if(my_strlen(str+1)>=2)
{
revrese_string(str+1); //4
}
*(str+len-1)=tmp; //5
}
int main()
{
char arr[]="abcdef";
reverse_string(arr);
printf("%s",arr);
return 0;
}
2、写一个递归函数,输入一个非整数,返回组成它的数字之和
int DigitSum(int num)
{
if(n>9)
{
return DigitSum(n/10)+n%10;
}
else
{
return num;
}
}
3、递归实现n的k次方
double pow(int n,int k)
{
if(k==0)
{
return 1;
}
else if(k>0)
{
return pow(n,k-1)*n;
}
else
{
return 1.0/pow(n,k-1);
}
}
int main()
{
int n=0;
int k=0;
scanf("%d %d",&n,&k);
double ret=pow(n,k);
printf("%lf\n",ret);
return 0;
}
4、递归实现n!
int fac(int n)
{
if(n<=1)
return 1;
else
return n*fac(n-1)
}
int main()
{
int num;
scanf("%d",&num) ;
printf("%d",fac(num));
}