Rekursive Algorithmen

Ein rekursiver Algorithmus ist eine Methode, bei der ein Problem gelöst wird, indem man auf eine kleinere Version seiner selbst verweist. Die Idee entspricht den rekursiven Definitionen in der Mathematik: Wir beginnen mit einer Basis, und darauf folgt ein rekursiver Schritt, der den Algorithmus auf einem einfacheren Teil des Problems wiederholt.

 

 

Von der Definition zum Code

Wenn wir eine rekursive Definition haben, kann sie oft direkt in einen Algorithmus übersetzt werden. Man muss nur übersetzen:

 

  • Basis: wann der Algorithmus stoppen kann.
  • Rekursiver Schritt: wie das Problem reduziert wird und der Algorithmus sich selbst aufruft.

 

 

Beispiel: Fakultät

Die Fakultätsfunktion ist rekursiv definiert als

 

$$ \large 0! = 1 $$

$$ \large n! = n \cdot (n-1)!, \quad n \geq 1 $$

 

Dies lässt sich als Algorithmus in Pseudocode schreiben:

 

function factorial(n):
    if n = 0:
        return 1        // Basis
    else:
        return n * factorial(n - 1)   // rekursiver Schritt

 

 

Der Algorithmus stoppt, wenn \( \large n = 0 \); andernfalls ruft er sich selbst mit einer kleineren Zahl auf. Schließlich werden alle Aufrufe zum Ergebnis zurückgeführt.

 

 

Beispiel: Maximum in einer Liste

Wir können auch einen Algorithmus rekursiv definieren, um die größte Zahl in einer Liste zu finden:

 

  • Basis: Wenn die Liste nur ein Element hat, ist dieses Element das Maximum.
  • Rekursiver Schritt: Vergleiche das erste Element mit dem Maximum der restlichen Liste.

 

 

function max(list):
    if list has length 1:
        return list[0]            // Basis
    else:
        m = max(rest of list)     // rekursiver Schritt
        return the larger of list[0] and m

 

 

Praktisches Beispiel

 

Wenn wir die Liste \( \large [7, 2, 9, 4] \) haben:

max([7,2,9,4])

= größer von 7 und max([2,9,4])

= größer von 7 und größer von 2 und max([9,4])

= größer von 7 und größer von 2 und größer von 9 und max([4])

= größer von 7 und größer von 2 und größer von 9 und 4

= größer von 7 und größer von 2 und 9

= größer von 7 und 9

= 9

 

 

Zusammenfassung

Ein rekursiver Algorithmus übersetzt die Idee hinter einer rekursiven Definition in Code. Zuerst wird ein Basisfall angegeben, bei dem der Algorithmus stoppt. Danach wird ein rekursiver Schritt beschrieben, bei dem der Algorithmus sich selbst auf ein einfacheres Problem anwendet. Dieses Muster findet sich in vielen bekannten Algorithmen, wie Sortieren, Suchen und der Verarbeitung von Datenstrukturen.