题目要求:
自己定义一个递归函数DigitSum(unsigned int),在传入参数会计算返回它的每一位数之和。
具体示例:
当输入的参数为: 1729
经过了DigitSum函数的计算之后,返回 19 。也就是 1 + 7 + 2 +9 的和。
首先,我们先把main()函数定义好,再来具体讲下DigitSum(unsigned int)函数的实现了。
main函数代码如下:
#include <stdio.h>
int main(){
int ret;
int num;
printf("请输入一个非负整数,结果将会输出它的每一位之和\n");
scanf("%d",&num);
ret = DigitSum(num);
printf("这个数的每一位之和为:%d\n", ret);
return 0;
}
这里,我们可以看到main()函数已经定义好了。
那么接下来,我们再接着分析下递归函数实现的思路了。
这里,DigitSum(unsigned int)函数已经写好了。
代码如下:
int DigitSum(int num) {
while (num > 0) {
return (num % 10) + DigitSum(num / 10);
}
return 0;
}
这里来分析DigitSum(unsigned int)函数代码的实现思路:
因为题目要求的是求输入的一个无符号整数的每一位数的和,那么我们首先要思考的问题就是如何去得到这个数的每一位了。
这里我们可以灵活利用 ' % ' 和 ' / ' 这来个符号来得到了。
具体可以看下图:
注:(这里的1,2,3,4看到后面就会了解是啥作用了。)
******解题主要就是搞懂这张图了
到这里,相信我们已经知道了该如何的去取到输入的参数的每一位数了。
其实,在画出这个图的时候,题目就已经解决的差不多了。
因其在求输入的参数的每一位数的时候,都需要两步,先取余再除。
而这每两步就可以看成一个函数。
因此上面求一个四位数的每一位数就可以看成四个函数。
也很巧合,这里我们刚好需要使用递归函数来实现要求。
并且我们观察也可以得到这个函数终止的条件就是当除的结果为0的时候,递归停止。
也就得到了递归的停止条件了 输入参数的值小于或等于零 。
到这里,也就具体的实现思路讲完了。
再最后加上一张运行结果: