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)