Verzweigte Rekursion und Mehrfacharbeit

Intermediate Algorithmen und Datenstrukturen Deutsch
Also available: English
Created by Best · 16.08.2026 at 09:13 UTC

Verzweigte Rekursion erzeugt mehrere Aufrufe pro Frame, etwa naive Fibonacci: fib(n)=fib(n-1)+fib(n-2). Die Aufrufzahl wächst exponentiell, viele Teilprobleme werden wiederholt.

Gegenmittel: Memoization, dynamische Programmierung oder geschlossene Formeln.

Komplexität der naiven Variante versus linearer DP-Variante unterscheiden können.

Diagram

$$T(n)=T(n-1)+T(n-2)+\Theta(1)$$

Dieselbe Zerlegung linear: Fibonacci Number [1].

Wo gebraucht

Unmemoized Suchbäume, naive rekursive Layouts, exponentielle Parser-Varianten. Dieselbe Struktur steckt in Divide-and-Conquer (Merge Sort) und in Backtracking; der Unterschied ist, ob Teilprobleme überlappen und ob man Ergebnisse speichert.

Vertiefung

Bei verzweigter Rekursion entstehen aus einem Problem mehrere Teilprobleme. Die Laufzeit hängt nicht nur von der Tiefe, sondern auch von der Zahl der Knoten im entstehenden Aufrufbaum ab.

Naive Fibonacci-Berechnung löst dieselben Argumente wiederholt. Memoisierung speichert Ergebnisse nach Argument und reduziert den Aufrufbaum auf die Zahl verschiedener Teilprobleme. Dynamische Programmierung berechnet dieselben Abhängigkeiten in geordneter Form ohne Rekursion.

Nicht jede Verzweigung bedeutet Mehrfacharbeit. Bei Divide-and-conquer-Verfahren können disjunkte Teilbereiche entstehen; dann bestimmt zusätzlich die Arbeit zum Teilen und Kombinieren die Rekurrenz.

Schwierigkeitsstufen

  1. Einen kleinen Aufrufbaum zeichnen.
  2. Wiederholte und disjunkte Teilprobleme unterscheiden.
  3. Eine Rekurrenz mit Memoisierung oder Teil-und-herrsche-Struktur analysieren.

Fallstricke

Die Rekursionstiefe allein beschreibt die Laufzeit nicht. Memoisierung hilft nur, wenn Zustände eindeutig und mit vertretbarem Aufwand als Schlüssel gespeichert werden.


Sources

University approvals: 0
Tasks
Question 1

Warum ist naive rekursive Fibonacci teuer?

Question 2

Wann reduziert Memoisierung die Arbeit besonders stark?

Question 3

Berechne Fibonacci-Zahlen rekursiv mit einem Memo-Array.

Hint

Ein Arrayelement wird über memo[index] gelesen oder geschrieben. Der vorhandene Wert -1 dient als noch nicht gesetzte Markierung.

Starter code is prefilled; replace TODO blocks with your solution.
1 test case will be used for grading
Run checks runtime behavior only. Final correctness is evaluated when you submit.
Card Info
  • Topic: Algorithmen und Datenstrukturen
  • Difficulty: Intermediate
  • Completed: 0 users
Creator
Best
Best
BestBuddy