文章目录
- 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;
}


















