以下是通过递归地添加数字的数字将给定数字减少为一位数的代码。
例如,如果输入是 845
,则输出是 8
。 8+4+5 = 17 -> 1+7 = 8
(输出)
#include <stdio.h>
#define TRUE 1
int reduceToSingle(int numb);
int main()
{
int numb;
scanf("%d",&numb);
printf("Original = %d Single digit = %d\n", numb, reduceToSingle(numb));
return TRUE;
}
int reduceToSingle(int numb)
{
int sum = 0, digit = 0;
for (digit = numb % 10; numb != 0; numb = numb / 10)
{
digit = numb % 10;
sum += digit;
}
if (sum > 9)
reduceToSingle(sum);
else
return sum;
}
在上面的 if (sum > 9)
block 中,我没有返回函数值。我只是调用了函数。从逻辑上讲,这个函数应该给出一个不正确的值。但是当我在我的系统中运行上面的程序时,我在输出中得到了正确的数字总和。我无法理解此行为背后的逻辑。
最佳答案
这只是未定义的行为,我相信您收到了警告。它碰巧可以工作 - 调整编译器设置或完全更改编译器,但它不会再工作了。
在这种情况下,我怀疑 eax
没有被破坏所以你得到期望值,即最后一个值 return
由任何电话编辑。所以当你调用reduceToSingle
,最终会达到return
(当 sum <= 9
时)。从此值eax
将滴入原始调用者。
关于c - 为什么我得到正确的输出,即使代码在逻辑上是不正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11629740/