2017-02-06 5 views
-1

Ich bin neu in C und ich versuche, Rekursion zu verwenden, um die Ziffern in einer Ganzzahl umzukehren (zum Beispiel wird 123 321). Ich muss auch das Ergebnis mit einer void-Funktion namens reverseDigits drucken. Die Funktion kehrt die Zahlen erfolgreich um, mein Problem ist, dass wenn ich versuche, die Ergebnisse zu drucken, es mehrmals drucken wird. Zum Beispiel, anstatt nur "321" zu drucken, druckt es "321 321 321". Ich habe bemerkt, dass es das Ergebnis druckt, wie viele Ziffern in der Nummer sind. "12" Ausgänge "21 21", "123" Ausgänge "321 321 321" und so weiter. Ich kann nicht herausfinden, was das verursacht. Ich brauche es nur einmal zu drucken. Was bewirkt das? reverseDigits (123) in der Hauptfunktion gibt es nur zu dem Zweck zu sehen, was die Ergebnisse wäre, wenn diese Nummer eingegeben wurde, wird es nicht im endgültigen Programm sein. (Nicht sicher, ob das relevant ist oder nicht).Reverse Zahlen in der Anzahl mit Rekursion in 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

Sie können [die Funktion 'div()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/div.html) verwenden, um den Quotienten und den Rest in einer einzigen Operation zu finden. –

Antwort

1

Wo Sie printf("%i ",reverse); haben, werden Sie für jede Schicht Ihrer Rekursion drucken. Wenn Sie 3 Mal rekrutieren (dh für die 3-stellige Zahl), werden Sie 3 mal drucken. Sie sollten nur an der Unterseite des Rekursion drucken:

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

Here is a live example.

Kleine Randnotiz: Ein Debugger beim nächsten Mal verwenden. Es macht es viel einfacher herauszufinden, warum kleine Programme nicht funktionieren.