对于今天我们的活动,我们大伙儿使用递归与数字的总和进行。 我已经作出此程序:
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()函数来完成。” 我做正确的事情? 还是我失去了我的代码的东西吗?
做递归,创建一个递归而不是使用一个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
,你看看会发生什么。
- 在递归一级,
n == 314
所以计算314 % 10
拿到4
和调用digitSum(31)
- 在递归二级,
n == 31
所以它计算31 % 10
拿到1
和调用digitSum(3)
- 备份到二级,这是添加到记住
1
和返回4
。
- 备份到一个水平,这是添加到记住
4
和返回8
。
因此,你最终得到的数字和8
的号码314
。