2017-02-06 430 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.

小邊注:使用調試器下一次。這使得弄清爲什麼小程序無法正常工作更容易。