在C中使用递归的数字总和
对于我们今天的活动,我们的任务是使用数字之和进行递归。 我已经制作了这个节目:
int main() { int num = 0, sum; printf("Enter an integer: "); scanf("%d",&num); //counter=1; for ( sum=0; num>0;) { sum = sum + num % 10; num = num /10; } printf("Sum = %d", sum); getch(); return 0; }
我们的老师补充说“输入和输出必须在main()函数中完成。” 我做对了吗? 或者我在代码中遗漏了什么?
要进行递归,请创建一个recurses而不是使用for循环的函数。
int SumDigits(int i) { if (i < 10) { return i; } else { return i%10 + SumDigits(i/10); } } scanf("%d", &i); printf("%d\n", SumDigits(i));
你有什么是迭代解决方案,而不是递归解决方案。
递归涉及根据问题的简单版本来定义问题,始终致力于固定的终点。
在这种情况下,固定终点是小于10的任何数字,其值是该数字。
转换到更简单的情况(对于大于9的数字)只是将最低有效数字加到数字的结果除以10(整数除法)。
因为它的课堂作业,伪代码只是我害怕。
def digitSum (n): if n < 10: return n return (n % 10) + digitSum (n / 10)
如果您按照数字314
,您将看到会发生什么。
- 在递归级别1,
n == 314
因此它计算314 % 10
得到4
并调用digitSum(31)
。- 在递归级别2,
n == 31
所以它计算31 % 10
得到1
并调用digitSum(3)
。- 在递归级别3,
n == 3
所以它只返回3
- 在递归级别3,
- 回到第二级,这被添加到记住的
1
并返回为4
。
- 在递归级别2,
- 回到第一级,这被添加到记住的
4
并返回为8
。
因此,对于数字314
您的数字总和为8
。