2017-02-06 428 views
-1

我是C新手,我试图用递归来反转整数中的数字(例如,123变为321)。我还需要使用称为reverseDigits的void函数来打印结果。该函数成功反转数字,我的问题是,当我尝试打印结果时,它会多次打印它。例如,打印“321 321 321”而不打印“321”。我注意到它打印结果的数量是多少。 “12”输出“21 21”,“123”输出“321 321 321”等。我无法弄清楚是什么导致了这种情况发生。我只需要它打印一次。是什么导致了这种情况发生? 主函数中的reverseDigits(123)仅用于查看输入数字后的结果,但不会出现在最终程序中。 (不知道这是否相关)。使用C中的递归在数字中反转数字

#include <stdio.h> 
#include <stdlib.h> 

int reverse=0; 
void reverseDigits(int number){ 
    int remainder; 
    if (number!=0){ 
    remainder = number % 10; 
    reverse = (reverse*10)+remainder; 
    reverseDigits(number/10); 
    printf("%i ",reverse); 
    } 
} 

int main() { 
reverseDigits(123); 

return 0; 
} 
+0

您可以使用[div()函数](http://pubs.opengroup.org/onlinepubs/9699919799/functions/div.html)在单个操作中查找商和余数。 –

回答

1

如果您有printf("%i ",reverse);您将为每一层递归打印。如果递归3次(即3位数字),您将打印3次。您应该只打印在递归的底部:

if (number!=0){ 
    ... 
} else { 
    printf("%i ",reverse); 
} 

Here is a live example.

小边注:使用调试器下一次。这使得弄清为什么小程序无法正常工作更容易。