使用C中的递归反转数字

时间:2017-02-06 20:07:33

标签: c recursion

我是C的新手,我正在尝试使用递归来反转整数中的数字(例如,123变为321)。我还需要使用名为reverseDigits的void函数打印结果。该功能成功地反转了数字,我的问题是,当我尝试打印结果时,它会多次打印。例如,而不是仅打印" 321"它打印" 321 321 321"。我注意到它打印结果,因为数字中有多个数字。 " 12"输出" 21 21"," 123"输出" 321 321 321"等等。我无法弄清楚导致这种情况发生的原因。我只需要打印一次。是什么导致这种情况发生? main函数中的reverseDigits(123)只是为了查看输入该数字时的结果,它不会出现在最终的程序中。 (不确定这是否相关)。

#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;
}

1 个答案:

答案 0 :(得分:1)

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

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

Here is a live example.

小方注意:下次使用调试器。它可以更容易地找出小程序无法正常工作的原因。