Rekursion Flashcards

1
Q

Fakultät mit Rekursion

A
public int fakultaet(int n)
{
   int result;
   if (n == 0)
   {
      result = 1;
   }
   else
   {
      result = n * fakultaet(n-1);
   }
   return result;
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Aufrufstack

A

° speichert zur Laufzeit Informationen über die gerade aktiven Methoden in Stackframes
° Bei Methodenaufruf werden die Rücksprungadresse und die lokalen Variablen in einem neuen Stackframe auf dem Stack gespeichert
° Bei Terminierung, wird der zugehörige Stackframe vom Stack geräumt
° In Java nicht zugänglich

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Aufrufstack bei Rekursion

A

° Rekursive Methodenaufrufe:
- Jeder rekursive Aufruf erzeugt einen Stackframe
- Jeder Rekursionsstufe arbeitet auf ihren eigenen lokalen Variablen und gibt ein Ergebnis zurück
° Jeder Aufruf legt folgende Informationen auf dem Stack ab: Platz für Ergebnis, Argument n, Rücksprungadresse in die rufende Methode

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Iterative Fakultät Berechnung

A

° Rekursive Programme haben oft kein gutes Speicher- und Ablaufverhalten
° Jedes mal wird ein neues Segment auf dem Aufrufstack belegt
° Vergleichsweiise hoher Aufwand

° Iterative Methode:
public int fakultaet (int n)
{
   int fakl = 1;
   for (int i = 1; i <= n; ++i)
   {
      fakl = i * fakl;
   }
   return fakl;
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Rekursion

A

° Methode m() ruft während der Ausführung ihres Rumpfes sich selber erneut auf:
-> Abruchbedingung zwingend benötigt!
° kleiner Teil des Problems wird gelöst
° Der Rest wird in kleinere Probleme zerlegt und ruft sich selbst mit diesen kleineren Problemen auf
° Zwei Arten von Rekursion:
- Direkt, wenn eine Methode m sich in Rumpf selbst aufruft
- Indirekt, wenn eine Methode m1 eine andere Methode m2 ruft, die aus ihrem Rumpf m1 aufruft

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Fibonacci-Zahlen mit Rekursion

A
public int fibonacci (int n)
{
   switch (n) {
      case 0: return 0;
      case 1: return 1;
      default: return fibonacci(n-1) + fibonacci(n-2);
   }
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Anwendungsbereiche von Rekursion

A

° Rekursiv definierte Strukturen z.B. Baumstrukturen in der Informatik (Syntaxbäume, Entscheidungsbäume, Verzeichnisbäume…)
° Viele sehr gute Sortierverfahren sind rekursiv definiert (z.B. Quicksort und Mergsort)
° Viele Probleme auf Graphen lassen sich elegant rekursiv lösen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly