计算一个数的每位之和(递归实现)
题目内容
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和。例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
题目分析
- 非递归实现
取出这个数的每一位,然后相加。 - 递归实现
对问题进行拆分
代码实现
- 非递归实现
#include<stdio.h>
#include<stdlib.h>
int DigitSum(unsigned int num)//
{
int sum = 0;
while (num != 0)
{
//取出个位
printf("%d\n", num % 10);
sum += num % 10;
num /= 10;
}
return sum;
}
int main()
{
int ret = DigitSum(1792);
printf("%d", ret);
}
结果
- 递归代码实现
#include<stdio.h>
#include<stdlib.h>
int DigitSum2(unsigned int num)
{
if (num == 0)
{
return 0;
}
return num % 10 + DigitSum2(num / 10);
}
int main()
{
int ret = DigitSum2(1792);
printf("%d", ret);
结果