题目
编写递归函数计算一个非负整数各位十进制数字之和。
输入格式:一行输入一个非负整数 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