Arbeitsblätter für JavaKara

Einführung in Java: Rekursion mit Parametern

Autor: Horst Gierhardt

Rekursion lässt sich auch Parametern und Rückgabewerten durchführen. Bei den Parametern ist zu beachten, dass bei jedem rekursiven Aufruf einer Methode mit einem Parameter eine neue, aber gleichnamige lokale Variable angelegt wird.

Beispiel für eine rekursive Methode mit Parametern und Rückgabewert:

double vielfaches (double x, int n)
{  if (n==1)
        { return x; }
   else { return x + vielfaches(x, n-1); }
}

Der Parameter x ist vom Typ double, also eine rationale Zahl bzw. Dezimalzahl. Dieser Parameter wird bei jedem rekursiven Aufruf weiter gereicht.

Aufgaben:

  1. Schreibe eine Methode potenz, die die n-te Potenz einer Zahl x rekursiv berechnet.

  2. Schreibe eine Methode fakultaet, die die Fakultät einer natuerlichen Zahl berechnet.

  3. Schreibe eine Methode fibo, die die n-te Fibonacci-Zahl berechnet.

  4. Kara soll eine Figur aus Kleeblättern nach folgendem Schema legen.
    • In der ersten Zeile liegt ein Kleeblatt.
    • In der zweiten Zeile liegt ein Kleeblatt.
    • In jeder anderen Zeile liegen so viele Kleeblätter wie in den beiden darüber liegenden Zeilen zusammen.

  5. Schreibe eine rekursive Version der Methode geheX(int n).

  6. Die beiden Methoden geheX(int n) und legeX(int n) sollen zu einer neuen Methode vorX(int n, boolean blatt) zusammengefasst werden. Bei blatt=true wird ein Blatt beim Weitergehen gelegt, sonst nicht. Die Methode ist rekursiv zu formulieren.

  7. Kara soll wie dargestellt eine Spirale legen und an seinen Startpunkt zurückkehren. Benutze dazu die vorher formulierte Methode vorX(int n, boolean blatt).

  8. Kara soll in der Mitte einer Spirale beginnen und die Spirale so legen, dass in den ,,Seitenlängen'' die Fibonacci-Zahlen auftreten.

  9. Was ist der Funktionswert makkaroni(5)?
    int makkaroni(int nudel)
    {  if (nudel==1)
            { return 1; }
       else { if (nudel==2)
                   { return 2; }
              else { return 2*makkaroni(nudel-2)+makkaroni(nudel-1); }
            }
    }
    

  10. Was ist der Funktionswert brat(5)?
    int brat(int kartoffel)
    {  if (kartoffel==1)
            { return 1; }
       else { if (kartoffel==2)
                   { return 3; }
              else { return 3*brat(kartoffel-2)+2*brat(kartoffel-1); }
            }
    }
    

  11. Zum Testen von Methoden mit Rückgabewerten kann die folgende Schablone dienen, die ohne Javakara arbeitet. Das Java-Programm wird einfach mit javac Test.java kompiliert und mit java Test gestartet. An die Stelle des bisherigen Hauptprogrammes myProgram tritt hier die Methode main. Der Methode vielfaches muss hier noch public static vorangestellt werden (Erklärung später!).

    class Test
    {
      public static int vielfaches(int x, int n)
      {  if (n==1)
            { return x; }
       else { return x + vielfaches(x, n-1); }
      }
    
      public static void main(String args[]) // Hauptprogramm
      {  for (int i=1; i<=10; i++)
              {
                System.out.println(vielfaches(7,i));
              }
      } // Ende von main
    } // Ende von class Test