Java: Rekursion mit String-Methoden?
Hallo,
wir haben momentan das Thema Rekursion und dazu habe ich eine Frage.
private String wasTueIch(String wort) {
if (wort.length() <= 1)
return wort;
else
return wasTueIch(wort.substring(1, wort.length())) + wort.charAt(0);
}
Meine Frage ist, warum die Methode rekursiv ist und wie man einen Palindromtester (Palindrom: ein Wort, welches gespiegelt die gleiche Bedeutung hat) einbauen kann.
3 Antworten
![](https://images.gutefrage.net/media/default/user/6_nmmslarge.png?v=1438863662000)
Rekursiv ist es weil die Methode sich selbst aufruft.
Naja, bei rekursiven Methoden würde ich von hinten Rangehen. Ein wort mit 0 oder einem Zeichen ist immer ein palindrom. Das sind schonmal die fälle in denen du die rekursion abbrechen kannst. Dann überlegst du was du du bei 2 oder mehr Zeichen machen musst um auf rekursion zu prüfen.
Man muss ziemlich abstrakt denken für sowas.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Ah okay dankd, ich verstehe aber nicht so ganz, warum sich die Wlrter spiegeln.
Beispiel: der wird zu red
Aber: bei mir wird der zu erd (weil nur der Bereich 1-2 angezeigt wird und der Buchstabe an der Stelle 0 hintendrangesetzt wird) und das wird zu rde (weil nur der Bereich 1-2 angezeigt wird und der Buchstabe an der Stelle 0 hintendrangesetzt wird).
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
warum die Methode rekursiv ist
Na weil sie sich offenbar selbst aufruft. Das ist mehr oder weniger die Definition von Rekursion.
und wie man einen Palindromtester (Palindrom: ein Wort, das gespiegelt die gleiche Bedeutung hat) einbauen kann
Ich weiß nicht, was mit "einbauen" gemeint ist.
Rein rekursiv: Überleg dir, was das kürzestmögliche Palindrom ist. Dann überleg dir, wie sich ein längeres Palindrom aus diesem aufbauen lässt. Und damit hast du praktisch schon den Lösungsweg.
Oder du baust ihn mit Hilfe der Funktion, die du da gezeigt hast. Das ist dann ein Einzeiler. Vermutlich ist das gemeint.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Ich komme irgendwie nicht weiter: Ein Palindrom muss beim Spiegeln gleich sein, daher gilt:
Erster Buchstabe und letzter müssen gleich sein. Zweiter und vorletzter, dritter und vorvorletzter etc. (wenn das Wort so lang ist).
Ursprünglich wollte ich eine if Bedingung haben mit
if(wort.equals(wasTueIch)) klappt aber nicht, da es keine Variable ist und
if(wort.equals((wort.substring(1,wort.length()))+wort.charAt(0))) klappt nicht, da dies nicht so häufig wiederholt wird, denn es wird die Methode nicht neu ausgerufen.
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
if(wort.equals(wasTueIch)) klappt aber nicht, da es keine Variable ist
Ja. Es ist eine Funktion. Also verwende es wie eine Funktion.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Könntest du mir die Lösung sagen, ich habe es seit 20 Min. versucht und dabei ist gar nichts rumgekommen...
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Wie bekommst du die Umkehrung eines Strings, als String?
wasTueIch(wort)
Wie vergleichst du zwei Strings, mit einem boolschen Resultat?
wort.equals(andererString)
Also setzen wir das obige ins untere ein und wir haben den Ausdruck.
wort.equals(wasTueIch(wort))
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Ich habd dies bereits gestern eingetippt, aber bei mir kommt eine Fehlermeldung.
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Tja, ohne zu wissen was du wo und wie getippt hast, und was die Fehlermeldung ist...
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Dann hast du den obigen Code an eine Stelle hingeschrieben, wo das Programm nie ausgeführt wird.
![](https://images.gutefrage.net/media/default/user/11_nmmslarge.png?v=1551279448000)
Sie ist rekursiv, weil sie sich selbst aufruft...
Den Palindromtest:
newString = new StringBuffer(oldString).reverse().toString();
Danke, ich wollte noch fragen, warum das so lange geht bis sich das Wort spiegelt. Sollte die Methode nicht unendlich weitergehen?