Guten Tag,
ich habe wieder mal ein Problem beim Programmieren, es geht dabei um Rekursion.
Und zwar möchte(muss) ich eine rekursive Methode programmieren, die einen String annimmt, und eine andere rekursive Methode aufruft und an diese einen String und einen Int (als Zähler) übergibt.
Ziel ist es, zu bestimmen ob der String ein Palindrom ist, also ein Wort was von vorne und hinten gelesen gleich ist.
Das Ganze habe ich schon mit einer Schleife gelöst, und das scheint auch zu funktionieren:
mein rekursiver Ansatz sieht jetzt so aus:
Über die println habe ich versucht den Fehler zu finden, leider vergeblich.
Wenn ich
aufrufe kriege ich für die Loop Variante (richtigerweise) ein true, und die rekursive Variante spruckt das hier aus:
neu aufrufen
neu aufrufen
neu aufrufen
z über halbe länge
trifft nicht zu
trifft nicht zu
trifft nicht zu
false
und was ich mich jetzt frage: an dem Punkt wo er "z über halbe länge" printet, müsste er doch danach true returnen und fertig? Das scheint er aber nicht zu machen, oder die Methode ruft sich erneut auf.
Gruß
ich habe wieder mal ein Problem beim Programmieren, es geht dabei um Rekursion.
Und zwar möchte(muss) ich eine rekursive Methode programmieren, die einen String annimmt, und eine andere rekursive Methode aufruft und an diese einen String und einen Int (als Zähler) übergibt.
Ziel ist es, zu bestimmen ob der String ein Palindrom ist, also ein Wort was von vorne und hinten gelesen gleich ist.
Das Ganze habe ich schon mit einer Schleife gelöst, und das scheint auch zu funktionieren:
Code:
public static boolean istPalindromLoop (String s) {
s = s.toLowerCase();
int z = 0;
boolean ausgabe = true;
while (ausgabe == true) {
if (z <= (s.length()/2)) {
if ((s.charAt(z)) == s.charAt(s.length()-(z+1))) {
++z;
}
else ausgabe = false;
}
else return true;
}
return ausgabe;
}
mein rekursiver Ansatz sieht jetzt so aus:
Code:
public static boolean istPalindromRek (String s) {
return istPalindromRek(s, 0);
}
public static boolean istPalindromRek (String s, int z) {
if (s.charAt(z) == s.charAt(s.length()-(1+z))) {
if (z > (s.length()/2)) {
System.out.println("z über halbe länge");
return true;
}
else {
System.out.println("neu aufrufen");
istPalindromRek (s, ++z);
}
}
System.out.println("trifft nicht zu");
return false;
}
Über die println habe ich versucht den Fehler zu finden, leider vergeblich.
Wenn ich
Code:
System.out.println(istPalindromLoop("anna"));
System.out.println(istPalindromRek("anna"));
neu aufrufen
neu aufrufen
neu aufrufen
z über halbe länge
trifft nicht zu
trifft nicht zu
trifft nicht zu
false
und was ich mich jetzt frage: an dem Punkt wo er "z über halbe länge" printet, müsste er doch danach true returnen und fertig? Das scheint er aber nicht zu machen, oder die Methode ruft sich erneut auf.
Gruß