Im Folgenden sind Musterlösungen zu den Aufgaben zum 23. März aufgeführt. Studiere diese und vergleiche mit deinen vorhandenen Lösungen.

Aufgabe 1:

Die folgende Methode p(int n) wird durch p(4) aufgerufen.

  public void p(int n)
  {  if (n>0) p(n-1);
     System.out.println(n);
  }

Was wird durch diesen Aufruf auf der Konsole ausgegeben? Versuche, die Ausgabe ohne konkreten Programmlauf vorauszusagen. Gib die Ausgabe hier wieder.

Lösung:

0
1
2
3
4

Erklärung: Durch den Aufruf p(4) startet eine Methode mit n=4. Diese Methode führt zum Aufruf p(3), wodurch die gleiche Methode (nicht die selbe!) nun mit n=3 startet. Man kann sich die gleiche Methode mehrmals aufgerufen im Computerspeicher vorstellen, wobei jede Methode ihren eigenen Wert von n hat. Dieser Aufrufmechanismus geht bis zu p(0). Nun erfolgt kein weiterer Aufruf und die Zeile mit ...println(n) wird ausgeführt, was jetzt zur Ausgabe von 0 führt. Dann kommt die Zeile mit ...println(n) des vorhergehenden Aufrufs dran, was zur Ausgabe von 1 führt. So wird der Rückweg (Rekursion) eingeschlagen.


Aufgabe 2:

In der Mathematik wird häufig die Fakultät einer natürlichen Zahl n benutzt. Man schreibt z. B.
5! = 5 · 4 · 3 · 2 · 1 · und liest dies als "5 Fakultät gleich 5 mal 4 mal..."
Man definiert die Fakultät üblicherweise rekursiv: n! = n · (n-1)! für n>0 und   0! = 1
Das bedeutet beispielsweise, dass 5! = 5 · 4!

Schreibe mithilfe der obigen Vorlage ein kleines Programm mit einer Funktion fakultaet(int n) und gib auch für die Methode action() einen beispielhaften Aufruf der Funktion mit einem angemessenen Text dazu an. Gib das komplette Programm hier ein.

Lösung:

class Fakultaet
{
  public int fakultaet(int n)
  { if (n==0)
         return 1;
    else return n * fakultaet(n-1);
  }

  public void action()
  { int zahl = 4;
    int ergebnis = fakultaet(zahl);
    String satz = zahl + "! entspricht " + ergebnis + ".";
    System.out.println(satz);
  }
}

Aufgabe 3:

Bei den Zahlenfolgen begegneten uns schon einmal die Fibonacci-Zahlen:
1    1    2    3    5    8    13    21    34    55   ...
Die n-te Fibonacci-Zahl f(n) ist wie folgt definiert:
f(1) = 1
f(2) = 1
f(n) = f(n-2) + f(n-1)    für natürliches n > 2.
In Worten: Zwei aufeinanderfolgende Fibonacci-Zahlen ergeben addiert die nächste Fibonacci-Zahl.

Schreibe mithilfe der obigen Vorlage ein kleines Programm mit einer Funktion fibonacci(int n) und gib auch für die Methode action() einen beispielhaften Aufruf der Funktion mit einem angemessenen Text dazu an. Gib das komplette Programm hier ein.

Lösung:

class Fibonacci
{
  public int fibonacci(int n)
  { if (n==1 || n==2)
         return 1;
    else return fibonacci(n-2) + fibonacci(n-1);
  }

  public void action()
  { int zahl = 7;
    int ergebnis = fibonacci(zahl);
    String satz = "Die " + zahl + ". Fibonacci-Zahl entspricht " + ergebnis + ".";
    System.out.println(satz);
  }
}

Aufgabe 4:

Die folgende Methode berechnet einen Funktionswert.

  public 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);
  }

Bestimme die Funktionswerte brat(1) bis brat(5). Ergänze!

Lösung:

brat(1) = 1
brat(2) = 3
brat(3) = 3 * brat(1) + 2 * brat(2) = 3 * 1 + 2 * 3  = 9
brat(4) = 3 * brat(2) + 2 * brat(3) = 3 * 3 + 2 * 9  =  27
brat(5) = 3 * brat(3) + 2 * brat(4) = 3 * 9 + 2 * 27 =  81