1

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

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

4

2 回答 2

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));
于 2013-08-30T01:39:02.247 回答
1

您所拥有的是迭代解决方案,而不是递归解决方案。

递归涉及根据问题的更简单版本来定义问题,始终朝着一个固定的端点工作。

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

转换到更简单的情况(对于大于 9 的数字)只是将最低有效位添加到数字除以 10(整数除法)的结果中。

既然是课业,恐怕只有伪代码。

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

如果你按照这个数字314,你会看到会发生什么。

  • 在递归级别 1,n == 314因此它计算314 % 10get4和 call digitSum(31)
    • 在递归级别 2,n == 31因此它计算31 % 10get1和 call digitSum(3)
      • 在递归级别三,n == 3所以它只是返回3
    • 备份到第二级,这将添加到记住1并返回为4.
  • 备份到第一级,这将添加到记住4并返回为8.

因此,您最终得到 number 的数字8总和314

于 2013-08-30T01:51:14.877 回答