使用递归计算数字之和

CBeginner
立即练习

介绍

递归(Recursion)是一种编程技术,其中函数调用自身,使得函数能够重复执行,直到满足基本情况(base case)并返回最终结果。在本实验中,我们将学习如何使用递归来计算给定数字的各位数字之和。

注意:你需要自己创建文件 ~/project/main.c 来练习编码,并学习如何使用 gcc 编译和运行它。

cd ~/project
## 创建 main.c
touch main.c
## 编译 main.c
gcc main.c -o main
## 运行 main
./main

获取用户输入

第一步是获取用户输入,这将是我们需要计算各位数字之和的数字。为此,我们将使用 scanf 函数从标准输入流(stdin)中读取用户输入。

#include<stdio.h>

int main()
{
    int num;
    printf("请输入一个数字:");
    scanf("%d", &num);

    /* 添加代码 */

    return 0;
}

定义递归函数

接下来,我们将编写一个递归函数来计算给定数字的各位数字之和。该函数将接收一个整数作为参数,并返回一个整数作为数字之和。函数将执行以下步骤:

  1. 如果数字小于 10,函数将返回数字本身作为数字之和。
  2. 如果数字大于或等于 10,函数将计算最后一位数字的和,并以剩余数字作为参数调用自身。
int sumOfDigits(int num)
{
    if(num < 10)
    {
        return num;
    }
    else
    {
        return num%10 + sumOfDigits(num/10);
    }
}

调用递归函数

现在,我们将使用第一步中获取的用户输入调用上一步定义的递归函数。该函数将返回数字的各位数字之和作为一个整数。

#include<stdio.h>

int sumOfDigits(int num);

int main()
{
    int num, sum;
    printf("请输入一个数字:");
    scanf("%d", &num);

    sum = sumOfDigits(num);

    /* 添加代码 */

    return 0;
}

int sumOfDigits(int num)
{
    if(num < 10)
    {
        return num;
    }
    else
    {
        return num%10 + sumOfDigits(num/10);
    }
}

显示结果

最后一步是显示第一步中获取的数字的各位数字之和。我们将使用 printf 函数将结果输出到标准输出流(stdout)。

#include<stdio.h>

int sumOfDigits(int num);

int main()
{
    int num, sum;
    printf("请输入一个数字:");
    scanf("%d", &num);

    sum = sumOfDigits(num);

    printf("%d 的各位数字之和是:%d", num, sum);

    return 0;
}

int sumOfDigits(int num)
{
    if(num < 10)
    {
        return num;
    }
    else
    {
        return num%10 + sumOfDigits(num/10);
    }
}

总结

在本实验中,我们学习了如何使用递归计算给定数字的各位数字之和。我们首先获取了用户输入,并定义了一个递归函数来计算数字之和。接着,我们调用了该函数并将结果显示给用户。