我是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;
}
答案 0 :(得分:1)
如果您有printf("%i ",reverse);
,则会为递归的每一层打印。如果您递归3次(即3位数字),您将打印3次。您应该只在递归的底部打印:
if (number!=0){
...
} else {
printf("%i ",reverse);
}
小方注意:下次使用调试器。它可以更容易地找出小程序无法正常工作的原因。