Palindrom

ed110

Grünschnabel
Hi Leute hab wieder mal ein kleines Problem,
ich verstehe einfach nicht wie das mit dem Umschreiben von iterativen in rekkrusive Schleifen funktioneiert.
Hab eine Aufgabe bekommen in der es um Palindrome (Wörter wie z.B. OTTO oder RENTNER, heißt man kann diese Wörter von links nach rechts oder von rechts nach links lesen ohne das sie ihre Bedeutung verlieren. ) geht.
Die iterative Lösung hab ich schon deklariert, jedoch muss ich diese auch rekrusiv verfassen. Dies ist nun mein Problem!
Falls mir jemand weiter Helfen kann, würd ich sehr dankbar sein.
Im vorraus Danke, Gruß ED

Code:
public class Palindrom {
 
 public static boolean isPalindrom(char a[]) {
  int k = a.length/2;
  for (int i=0; i<k; i++) {
   if ( a[i] != a[a.length-1-i] ) { return false; }
  }
  return true;
 }
 
 public static boolean isPalindromRekursiv(char a[]){
  
  int i = 0;
  
  if (a[i] != a[a.length-i]) return false;
  else 
  return isPalindromRekursiv(a);
 } 
} 
 
 
public class PalindromTest {
 
 public static void main(String args[]) {
  
  char a[] = args[0].toCharArray();
  
  System.out.println("ist-" +
   (Palindrom.isPalindrom(a) ? "" : "kein-") +
   "palindrom");
   
  System.out.println("ist-" +
   (Palindrom.isPalindromRekursiv(a) ? "" : "kein-") +
   "palindrom");
 }
}
 

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Schau mal hier:
Code:
/*
 * Created on 17.01.2005@19:46:23
 *
 * TODO Licence info
 */
package de.tutorials;

/**
 * @author Administrator
 *
 * TODO Explain me
 */
public class Palindrom {

    public static void main(String[] args) {
        //Getestetet mit: http://www.gnudung.de/kram/sprache/palindrom.htm
        String palindrom = "gnubelebung";
        char[] cA = palindrom.toCharArray();
        System.out.println(isPalindrom(cA, 0, cA.length - 1));
    }

    public static boolean isPalindrom(char[] cA, int lower, int upper) {
        if (lower < upper && cA[lower] == cA[upper]) {
            return isPalindrom(cA, ++lower, --upper);
        } else {
            if (cA[lower] == cA[upper])
                return true;
            return false;
        }
    }
}

Gruß Tom
 

Thomas Darimont

Erfahrenes Mitglied
Hallo!

...oder besser so:
Code:
    public static boolean isPalindrom(char[] cA, int lower, int upper) {
        if (lower < upper) {
            if (cA[lower] == cA[upper]) {
                return isPalindrom(cA, ++lower, --upper);
            } else {
                return false;
            }
        } else {
            return true;
        }
    }

Gruß Tom