在C中使用递归的数字总和

时间:2013-08-30 01:30:00

标签: c recursion sum sum-of-digits

对于我们今天的活动,我们的任务是使用递归和数字之和。我已经完成了这个程序:

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()函数中完成。”我做对了吗?或者我在代码中遗漏了什么?

2 个答案:

答案 0 :(得分:2)

要进行递归,请创建一个递归而不是使用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));

答案 1 :(得分:1)

你有什么是迭代解决方案,而不是递归解决方案。

递归涉及根据问题的简单版本来定义问题,始终致力于固定的终点。

在这种情况下,固定终点是任何小于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
    • 备份到第二级,已添加到记住的1并返回为4
  • 备份到第一级,这已添加到记住的4并返回为8

因此,对于数字8,您最终会得到314的数字和。