文章目录
- 1.删除公共字符
- 2.读入一串以'?'结束的字符串,逆序输出。
- 法一:常规递归
- 法二:投机取巧
- 3.递归将整数输出为字符串
- 4.递归输出1--n的平方和
- 5.递归计算2+22+222+...
- 6.递归求最大公约数
- 7.递归输出x的n次方
- 8. 递归计算下列式子的值
1.删除公共字符
输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符。
保证两个字符串的长度均不超过100。
输入:两行字符串。
They are students.
aeiou
输出:删除后的字符串。
Thy r stdnts.
#include<stdio.h>
#include<string.h>
void dlt(char* s1, char* s2)
{
char* x = s1;
char* y = s2;
int i, a[256] = { 0 }, n = strlen(s2);
for (i = 0; i < n; ++i)
a[s2[i]] = 1;
while (*x)
{
if (a[*x] == 0)
*y++ = *x;
x++;
}
*y = '\0';
}
int main()
{
char s1[1000], s2[1000];
gets(s1);
gets(s2);
dlt(s1, s2);
printf("%s\n", s2);
return 0;
}
2.读入一串以’?'结束的字符串,逆序输出。
法一:常规递归
#include <stdio.h>
#include <string.h>
char* reverse(char* s)
{
if (!s)
return NULL;
int n = strlen(s);
if (n > 1)
{
char t = s[0];
s[0] = s[n - 1];
s[n - 1] = '\0';
reverse(s + 1);
s[n - 1] = t;
}
return s;
}
int main()
{
char str[100];
gets(str);
reverse(str);
puts(str);
return 0;
}
法二:投机取巧
#include <stdio.h>
void reverse()
{
char c;
scanf("%c", &c);
if (c != '?')
{
reverse();
printf("%c", c);
}
}
int main()
{
reverse();
return 0;
}
3.递归将整数输出为字符串
void convert(int n, int m)
{
int i;
if ((i = n / 10) != 0)
convert(i, m);
putchar(n % 10 + '0');
if (n != m)
printf("-");
}
int main()
{
int n;
scanf("%d", &n);
if (n < 0)
{
printf("-");
n = - n;
}
convert(n, n);
printf("\n");
return 0;
}
4.递归输出1–n的平方和
#include <stdio.h>
#include <math.h>
int sum(int n)
{
if (n == 1)
return 1;
return n * n + sum(n - 1);
}
int main()
{
int n;
scanf("%d", &n);
printf("%d", sum(n));
return 0;
}
5.递归计算2+22+222+…
#include<stdio.h>
int f(int a, int n)
{
if (n > 1)
return a * n + f(a, n - 1) * 10;
else
return a;
}
int main()
{
int a, n;
scanf("%d %d", &a, &n);
printf("%d", f(a, n));
return 0;
}
6.递归求最大公约数
#include<stdio.h>
int gcd(int a, int b)
{
if (a <= 0 || b <= 0)
return 0;
if (a % b == 0)
return b;
else
gcd(b, a % b);
}
int main()
{
int a, b, c;
scanf("%d,%d", &b, &c);
a = gcd(b, c);
printf("%d和%d的最大公约数为:%d\n", b, c, a);
}
7.递归输出x的n次方
#include<stdio.h>
double f(int x, int n)
{
double s = 1;
if (n > 0)
s = x * f(x, n-1);
else if (n == 0)
s = 1;
else
s = 1.00 / f(x, -n);
return s;
}
int main()
{
int x = 0, n = 0;
scanf_s("%d %d", &x, &n);
printf("%lf\n", f(x, n));
return 0;
}
8. 递归计算下列式子的值
#include<stdio.h>
#include<math.h>
double f(double x, int n)
{
if (n == 1)
return sqrt(1 + x);
else
return sqrt(n + f(x, n - 1));
}
int main()
{
double x;
int n;
scanf("%lf %d", &x, &n);
printf("%lf", f(x, n));
return 0;
}