day14
谁能横刀立马,唯我飞牛大将军!
1.字符串逆序(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
非递归
#include<stdio.h>
#include<windows.h>
#pragma warning (disable :4996)
void fun(char *_str)
{
char *start = _str;
char *end = _str + strlen(_str) - 1;
char temp = 0;
while (start < end)
{
temp = *start;
*start = *end;
*end = temp;
start++, end--;
}
}
int main()
{
char str[10];
scanf("%s", str);
printf("倒序之前:%s\n", str);
fun(str);
printf("倒序之后:%s\n", str);
system("pause");
return 0;
}
这是打印输出,不符合题意
void fun(char*_str)
{
if (*_str != '\0')
{
fun(_str + 1);
printf("%c",*_str);
}
}
int main()
{
char str[10];
scanf("%s", str);
fun(str);
printf("\n");
system("pause");
return 0;
}
递归做法
void fun(char*_str)
{
char *start = _str;
char *end = _str + strlen(_str) - 1;
char temp = *start;
*start = *end;
*end = '\0';
if (strlen(_str+1) >= 2)
{
fun(_str + 1);
}
*end = temp;
}
int main()
{
char str[10];
scanf("%s", str);
fun(str);
printf("%s",str);
printf("\n");
system("pause");
return 0;
}
2.计算一个数的每位之和(递归实现)
写一个递归函数fun(n),输入一个非负整数,返回组成它的数字之和
例如,调用fun1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
#include<stdio.h>
#include<windows.h>
int fun(int n)
{
if (n < 10)
{
return n;
}
else
{
return n % 10 + fun(n / 10);
}
}
int main()
{
int ret = fun(12345);
printf("%d\n",ret);
system("pause");
return 0;
}
3.递归实现n的k次方
#include<stdio.h>
#include<windows.h>
int fun(int n,int k)
{
if (k == 0)
{
return 1;
}
else if (k >= 1)
{
return n*fun(n, k - 1);
}
}
int main()
{
int b = 0;
int a = 0;
scanf_s("%d",&a);
scanf_s("%d", &b);
int ret = fun(a,b);
printf("%d\n", ret);
system("pause");
return 0;
}