目录
代码要求
- 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
- 例如:调用DigitSum(1749),则应该返回1+7+4+9,也就是返回21
代码实现
#include<stdio.h>
int DigitSum(int n)
{
if (n <= 9)
return n;
else
return DigitSum(n / 10) + n % 10;
}
int main()
{
//输入
int num = 0;
scanf("%d", &num);
//计算
int ret = DigitSum(num);
//输出
printf("%d\n", ret);
return 0;
}
代码验证
n为1位数时
n为多位数时
DigitSum(n)函数体分析
当n为一位数时:直接返回n,因为一位数没有其他位能相加
if (n <= 9)
return n;
当n为多位数时:先把n的个位单独剥离出来,单独加在旁边,再重新传递给DigitSum(n)函数剥离出来后的n,重复往返,形成递归
else
return DigitSum(n / 10) + n % 10;
DigitSum(n)函数体运行过程
int DigitSum(int n)
{
if (n <= 9)
return n;
else
return DigitSum(n / 10) + n % 10;
}
当n为一位数时
例如输入的n为9时:进行if判断,n <= 9 成立,直接返回n即可
当n为多位数时
例如输入的n为174时:
第一次进入函数:判断n后执行else中的语句,return DigitSum(174 / 10) + 174 %10,return时调用了DigitSum函数,所以要再次进入函数
进入第二次函数前:
174 / 10 = 17(整数除法,结果舍去小数)
174 % 10 = 4
第二次进入函数:判断n后执行else中的语句,return DigitSum(17 / 10) + 17 % 10,return时调用了DigitSum函数,所以要再次进入函数
进入第三次函数前:
17 / 10 = 1(整数除法,结果舍去小数)
17 % 10 = 7
第三次进入函数:判断n后执行if中的语句,return 1,直接返回1,这次返回后直接返回到第二次进入函数时
回到第二次进入函数:return 1 + 7,也就是return 8
回到第一次进入函数:return 8 + 4,也就是return 12
自此,递归结束,最后结果返回12