目录
题目要求:
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
一、代码实现:
#include <stdio.h>
int DigitSum(size_t n)
{
if (n < 9)
{
return n;
}
else
{
return DigitSum(n / 10) + n % 10;// 前n-1位之和+第n位
}
}
int main()
{
size_t num = 0;//size_t是非负整数类型
scanf("%u", &num);
int ret = DigitSum(num);
printf("%d\n", ret);
return 0;
}
二、代码思路:
若:输入的是1729:
DigitSum(1729);
计算则需要一位一位的剥下来,因为9最容易剥离,所以用DigitSum(172)函数算出172的组成数字之和 + 9;而DigitSum(172)的每位数字之和再剥离为DigitSum(17)17的每位之和 +2 +9
;当拆成一位数的时候就不需要再拆了。
即是:
DigitSum(1729);
DigitSum(172)+9;
DigitSum(17)+2+9;
DigitSum(1)+7+2+9;
注意:
1729/10=172; 1729%10=9;
172/10=17,172%10=2;
17/10=1,17%10=7;
该博客介绍了如何使用递归函数DigitSum计算非负整数的数字之和。通过逐位剥离数字并递归计算,例如对于1729,函数会逐步计算1729→172+9→17+2+9→1+7+2+9,最终得到19。代码中使用C语言实现,主要涉及递归和整数运算。
319





