Rekursion
Methode, die sich selbst aufruft
Rekursion umfasst immer
Abbruchbedingung(en) = Rekursionsanker
zum Beenden der Rekursion
Rekursive(n) Aufruf(e)
auch indirekte Rekursion möglich
Rekursion meist ineffizienter als iterative Lösung,
aber manchmal klarer
abhängig von Problemstellung
INFORMATIK
UNIVERSITÄT LINZ
<1>
Grundstruktur rekursiver Algorithmen
Rekursion(){
if (Abbruchbedingung){ –– Rekursionsanker
löse einfaches Problem;
gib Ergebnis zurück;
} else { –– rekursiver Aufruf
zerlege Problem in einfachere(s) Problem(e)
und rufe Rekursion() für diese(s)
kleinere(n)
Problem(e) auf;
vereinige einfachere Lösung(en);
}
}
INFORMATIK
UNIVERSITÄT LINZ
<2>
Beispiel: Prüfung auf Zerlegbarkeit
Gegeben ist ein Rohr der Gesamtlänge l. Gesucht ist eine Funktion, die
prüft, ob dieses Rohr so in beliebig viele Teilstücke der Längen l1, l2
und l3 zerlegt werden kann, dass nichts übrigbleibt.
Ist eine derartige Zerlegung möglich, soll als Funktionswert true, sonst
false zurückgegeben werden.
INFORMATIK
UNIVERSITÄT LINZ
<3>
Binärer Suchbaum
Ein Binärbaum ist entweder leer oder er besteht
aus einem Knoten dem ein Element und zwei
binäre Bäume zugeordnet sind (rekursive
Definition).
Bei einem Binären Suchbaum sind die Elemente
sortiert: Alle Elemente im linken Teilbaum eines
Knoten sind kleiner als das Knotenelement, alle
Elemente im rechten Teilbaum sind größer (oder
gleich) als das Knotenelement.
INFORMATIK
UNIVERSITÄT LINZ
<4>
Traversierung
Pre Order (Wurzel, links, rechts)
In Order (links, Wurzel, rechts)
Post Order (links, rechts, Wurzel)
Linz
Graz
Enns
INFORMATIK
UNIVERSITÄT LINZ
<5>
Wels
Lienz
Überlegungen zur Implementierung
Operationen auf Bäume
Anlegen eines Baumes
Einfügen von Knoten
Suchen von Knoten
Traversierung
(Löschen von Knoten)
INFORMATIK
UNIVERSITÄT LINZ
<6>
Aufteilung Funktionalität
Baum
hat Verweis auf
Wurzelknoten
Einfügen, Suchen von
Knoten
Traversierung
Löschen von Knoten
Knoten
hat Verweis auf linken
und rechten Teilbaum
kennt Inhalt (Element)