Jahrgangsstufe Q1 - Informatik - Dienstag, der 23. März 2021


Rekursion

Mein Name:
Jahrgang/Klasse:
Meine E-Mail-Adresse:

Wiederholung: Eine Funktion mit Rekursion:

Eine einfache Funktion, die das n-fache einer Zahl x berechnet mit einer natürlichen Zahl n, ist hier gegeben. Da es ein bisschen albern ist, dafür einen Marienkäfer zu benutzen, ist hier eine Programmversion für BlueJ ohne Käfer angegeben. Dieses Miniprogramm kann man als Vorlage für weitere Beispiele nehmen.

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

  public void action()
  { double zahl = 3.1415;
    int faktor  = 4;
    double ergebnis = vielfaches(zahl, faktor);
    String satz = "Das " + faktor + "-fache von " + zahl;
    satz = satz + " ist " + ergebnis + ".";
    System.out.println(satz);

  }
} // Ende der Klasse

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.

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.

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.

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!