String umgekehrt ausgeben
-
Hallo,
ich lerne gerade die Rekursione und habe folgendes Bsp gesehen:
char c[80]; void ausgabe(int n) { if (c[n] != '\0') { ausgabe(n+1); cout << c[n]; } }wäre jemand so nett und mir diese Rekursion erklären(ich habe ein main erstellt und als ausgabe bekomme ich den eingegebenen String umgekehrt, aber verstehe nicht wieso
)danke
-
ich auch nicht *g*. sollte er den string nicht richtig rum ausgeben? was übergibst du als "n" an "ausgabe"?
-
cin schrieb:
ich auch nicht *g*. sollte er den string nicht richtig rum ausgeben? was übergibst du als "n" an "ausgabe"?
als n übergebe ich 0
z.B in
main () { cin >> c; ausgabe(0) }
-
Auf deutsch: Wenn das aktuelle Zeichen nicht das letzte ist, gibt zuerst den Nachfolger, dann das aktuelle Zeichen aus.
Oder anders:
Bevor Du das aktuelle Zeichen ausgibst (wenn nicht am Ende), gib den Nachfolger aus, d.h. vor jedem Zeichen steht der Nachfolger.
-
ok ich war blind

-
tntnet schrieb:
Auf deutsch: Wenn das aktuelle Zeichen nicht das letzte ist, gibt zuerst den Nachfolger, dann das aktuelle Zeichen aus.
Oder anders:
Bevor Du das aktuelle Zeichen ausgibst (wenn nicht am Ende), gib den Nachfolger aus, d.h. vor jedem Zeichen steht der Nachfolger.
danke
-
Also irgendwie kapier ich das nicht...
char c[80]; void ausgabe(int n) { if (c[n] != '\0') { ausgabe(n+1); // hier springt er wieder in die Funktion "ausgabe cout << c[n]; // und d.h. ja, dass das hier nie erreicht wird } // ist die Bedingung false, wird du Funktion beendet, cout aber trotzdem // nie erreicht }Irgendwie...komisch. Trotzdem klappts ja auch bei mir -.-

-
char c[80]; void ausgabe(int n) { if (c[n] != '\0') { ausgabe(n+1); // wenn hier die Funktion fdkguhjhj aufgerufen würde cout << c[n]; // würde man dann hier nie hinkommen? } }Jockel
-
arbeite dir mal in Gedanken durch, was in der Funktion passiert:
c="TEST"; ausgabe(0): if(c[0]!='\0')->true (c[0]='T') ausgabe(1): if(c[1]!='\0')->true (c[1]='E') ausgabe(2): if(c[2]!='\0')->true (c[2]='S') ausgabe(3): if(c[3]!='\0')->true (c[3]='T') ausgabe(4): if(c[4]!='\0')->false (c[4]=0 - Stringende) return cout<<c[3];-> Ausgabe "T" endif return cout<<c[2];-> Ausgabe "S" endif return cout<<c[1];->Ausgabe "E" endif return cout<<c[0];->Ausgabe "T" endif return ->Weiter im ProgrammDu mußt dabei bedenken, daß die Funktion sich selbst rekursiv aufruft, d.h. wenn der Aufruf von ausgabe(n+1); beendet ist, macht sie dahinter weiter mit dem cout<<...
-
Ach soo stimmt! Ausgeklügeltes System^^
-
Noch etwas - globale Variablen solltest du vermeiden, besser wäre diese Version:
void rev_aus(const char* what); { if(*what!='\0') { rev_aus(what+1); cout<<*what; } }