使用C中的递归位数之和(Sum of Digits using recursion in C)

2019-09-28 12:58发布

对于今天我们的活动,我们大伙儿使用递归与数字的总和进行。 我已经作出此程序:

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()函数来完成。” 我做正确的事情? 还是我失去了我的代码的东西吗?

Answer 1:

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


Answer 2:

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

递归包括定义中的问题的一个简化版本方面的问题,所有的时间成为固定终点的工作。

在这种情况下,固定端点低于10,对于其值是数字的任何数。

为更简单的情况下的转换(对于数字大于9)是简单地给至少显著位添加到由10(整数除法)除以数的结果。

由于它是课堂作业,伪代码只有我害怕。

def digitSum (n):
    if n < 10:
        return n
    return (n % 10) + digitSum (n / 10)

如果您按照人数为314 ,你看看会发生什么。

  • 在递归一级, n == 314所以计算314 % 10拿到4和调用digitSum(31)
    • 在递归二级, n == 31所以它计算31 % 10拿到1和调用digitSum(3)
      • 在递归三级, n == 3所以它只是返回3
    • 备份到二级,这是添加到记住1和返回4
  • 备份到一个水平,这是添加到记住4和返回8

因此,你最终得到的数字和8的号码314



文章来源: Sum of Digits using recursion in C