题目

编写递归函数计算一个非负整数各位十进制数字之和。

输入格式:一行输入一个非负整数 n。

输出格式:输出一个整数,表示该数各位数字相加的总和,末尾换行。

数据范围与约定:0 ≤ n ≤ 2×109。

思路与算法

1. 递归拆解逻辑
递归基:当 n < 10 时,只有一位数字,直接返回 n;
递推步:多位数之和等于当前个位数 n % 10 加上高位剩余数字的和 sumDigits(n / 10)。

2. 调用深度
32 位整数最多 10 位,递归层数不超过 10 层,调用栈开销极小。

完整程序

#include <stdio.h>

// 递归求数位之和:当前个位数加上剩余高位递归之和
static int digit_sum(int n)
{
    // 递归出口:数值归零时返回 0
    if (n == 0) {
        return 0;
    }
    return n % 10 + digit_sum(n / 10);
}

int main(void)
{
    int n;
    if (scanf("%d", &n) != 1 || n < 0) {
        return 1;
    }
    printf("%d\n", digit_sum(n));
    return 0;
}

运行示例

输入:

1234

输出:

10