# eine Zeichenfolge rekursiv verkehrt ausgeben



## Han (25. Jul 2005)

Hallo..mach zur Übung ein Programm welches eine Zeichenfolge einlesen soll und dann rekursiv wieder ausgeben soll,ohne es in einem Array zwischenzuspeichern....aber ich komm einfach nicht weiter....hier mein Code:
IO.write() gibt Text am Bildschirm aus
a.charAt(i) behandelt ein Zeichen an der Stelle i im String a
IO.readLine() liest einen Text ein


```
public class spiegelnEinerZeichenfolge{
        
        static boolean spiegel(String a,int i){
                
            int l = a.length() - 1;

                if(i == l||spiegel(a,i++)){
                     IO.write(a.charAt(i));//z.b. bei String a = "Han" ist a.charAt(2) = n
                         return true;
                }
            
        return false;        
        }
        
          
        public static void main(String[] args){
            
        IO.write("Geben Sie ein beliebiges Wort ein: ");
        String text = IO.readLine();
   
        spiegel(text,0);
        //Textlänge: z.b. Hannes -> 6
                        
        }        
}
```
 
Was mache ich falsch? _[Antwort von Beni: du benutzt keine Codetags...]_
JAVA zeigt mir einen Stackoverflow an....

mfg,
Hannes


----------



## mic_checker (25. Jul 2005)

benutz doch bitte die suchfunktion, zum thema wörter rückwärts ausgeben etc. gabs schon einige threads


----------



## Han (25. Jul 2005)

Kannst du mir genau die Stichwörter für die Suche geben denn ich kann nichts finden.....


----------



## mic_checker (25. Jul 2005)

Ein Beispiel-Thread der auch ne rekursive Lösung beinhaltet:

http://www.java-forum.org/de/viewtopic.php?t=16747&highlight=string+reverse

Iterative Lösungen gibt es massig im Forum, auch eigene Implementierungen unabhängig von reverse() von StringBuffer....


----------



## Chase (26. Jul 2005)

Ersetz mal bei deiner Lösung das i++ durch (i+1). (mit Klammern!)
Kann dir nicht wirklich erklären warum, StackOverflow heisst jedoch soviel, dass du eine Endlosrekursion hast.
Und siehe da, bei i++ bleibt i wohl immer 0, wär toll wenn jemand sagen könnte warum.
Es muss wohl daran liegen dass dieses Inkrement anders kompiliert wird als man glaubt, aber ich hab wirklich keine Ahnung 
edit: Ach ja: ++i klappt, liefert aber seltsame Ergebnisse (falsche Reinfolge)


----------



## bygones (26. Jul 2005)

logisch gesehen würde ich auch von hinten anfangen zu zählen (du willst ja wenn ich richtig verstanden haben das Wort umgedreht ausgeben).

d.h. als Start position würde ich die Länge des Strings nehmen (bzw length-1). das jeweilige char ausgeben und dann die Methode erneut aufrufen  mit einer verringerten pos....


----------



## Bleiglanz (26. Jul 2005)

rekursiv ist doch anders

```
spiegel(wort){
   wenn länge von wort = 0 dann return
   sonst
      drucke letztes zeichen
      spiegel(wortohneletzteszeichen)
}
```


----------



## Newlukai (26. Jul 2005)

@Chase: Es gibt da wirklich einen Unterschied. Es gibt zwei Inkrementschreibweisen. Einmal i++ und dann ++i. Der Unterschied ist leicht erklärt:

i++ gibt zuerst i zurück und inkrementiert es anschließend.
++i inkrementiert zuerst i und gibt dann das Ergebnis zurück.

Wenn man also in einer Schleife spiegel(a, i++) aufruft, wird tatsächlich immer 0 übergeben und dann inkrementiert. Theoretisch müßte obiges Programm also mit spiegel(a, ++i) funktionieren.


----------

