0%

递归练习

文章时效性提示

本文发布于 514 天前,部分信息可能已经改变,请注意甄别。

字符串逆序

编写一个函数reverse_string(char* string)(递归实现),将参数字符串中的字符反向排列。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
void reverse_string(char arr[])
{
    char tmp = arr[0];
    int len = strlen(arr);
    arr[0] = arr[len-1];
    arr[len-1] = '\0';
    if (strlen(arr+1) >= 2)
    {
        reverse_string(arr+1);
    }
    arr[len-1] = tmp;
}

int main() {
    char arr[] = "abcdefghijklmn";
    reverse_string(arr);
    printf("%s\n",arr);
    return 0;
}

计算一个数字的每位之和

写一个递归函数DigitalSum(n),输入一个非负整数,返回组成它的数字之和。
例如:调用DigitalSum(1234),则返回1+2+3+4 = 10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <string.h>
int reverse_string(int num)
{
    static int y = 0;
    y = y + (num % 10);
    num = num / 10;
    if (num>9)
    {
        reverse_string(num);
    }else
    {
        y = y + num;
    }
    return y;
}

int main() {
    int x = 0;
    int y = 0;
    printf("计算一个数字每位之和\n");
    printf("请输入一个数字:->");
    scanf("%d",&x);
    y = reverse_string(x);
    printf("%d\n",y);
    return 0;
}

递归实现n的k次方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <string.h>
int kCiFang(int x,int k)
{
    int a = x;
    static int sum = 1;
    sum = sum * a ;
    k--;
    if (k>0) {
        kCiFang(x, k);
    }
    return sum;
}

int main() {
    int k = 0;
    int x = 0;
    int y = 0;
    printf("计算一个数的k次方\n");
    printf("请输入这个数字:->");
    scanf("%d",&x);
    printf("请输入k:->");
    scanf("%d",&k);
    y = kCiFang(x,k);
    printf("%d\n",y);
    return 0;
}