Abstiegsfunktion
Eine Abstiegsfunktion ist in der Mathematik und in der Informatik eine Funktion, mit der nachgewiesen werden kann, dass eine Rekursion terminiert.
Prinzip
Zu einer rekursiven Funktion wird eine Abstiegsfunktion definiert, deren Wert mit jedem Aufruf von abnimmt. Dafür wird der Einfachheit halber gewählt. Eine solche Abstiegsfunktion kann beispielsweise so gewählt werden, dass sie die Anzahl der verbleibenden Rekursionsschritte angibt, bis die Rekursion terminiert. Anstelle der Relation < (ist kleiner als) in kann jedoch auch jede beliebige andere wohlfundierte Relation in eingesetzt werden, also jede Relation in , die in jeder Teilmenge von eine Ordnung herstellt, die mit einem bestimmten Element dieser Teilmenge beginnt.
Nun wird nachgewiesen, dass mit jedem Aufruf von der Wert von abnimmt, das heißt, wenn zur Berechnung von der Wert von notwendig ist, muss gelten.
Die Bedingung, dass die Relation < wohlfundiert sein muss, besagt hier, dass es ein Minimum geben muss. Es kann also irgendwann keinen Wert von geben, zu dem noch ein kleinerer Wert gefunden werden kann. Daraus, dass der Wert von laut Definition von bei jedem Rekursionsschritt aber abnehmen muss, lässt sich jetzt ableiten, dass ab irgendeinem Wert kein weiterer Rekursionsschritt stattfindet und damit dass die Rekursion terminiert.
Beispiele
Mathematik
Sei
Wir definieren die Abstiegsfunktion wie folgt:
Mit laut rekursiver Funktionsdefinition
ist
und damit
wahr. Damit ist nachgewiesen, dass der Wert von mit jedem Rekursionsschritt sinkt; da er in aber nicht endlos sinken kann, terminiert die Rekursion.
Informatik
Ein Algorithmus ist angegeben durch den folgenden Java-Code:
void triangle(String s) {
System.out.println(s);
if(s.length() <= 1) return;
triangle(s.substring(1));
}
Hier wird also die Funktion triangle mit einer Zeichenkette als Argument aufgerufen. Der übergebene Text wird ausgegeben, anschließend wird die Methode verlassen, falls die Länge des Strings nur ein Zeichen oder weniger beträgt. Falls sie jedoch größer ist, wird die Methode triangle rekursiv mit dem Rest der Zeichenkette nach Abschneiden des ersten Zeichens aufgerufen. Ein Aufruf mit der Zeichenkette "Hallo!" ergibt also die folgende Ausgabe:
Hallo! allo! llo! lo! o! !
Um den Beweis zu führen, dass triangle nicht nur bei der Eingabe "Hallo!" terminiert, sondern auch bei allen anderen, ziehen wir als Abstiegsfunktion die Länge der Zeichenkette heran. Aus dem Abschneiden des ersten Zeichens bei der Rekursion ergibt sich damit
Und so auch über
und die Definition der Fundiertheit, dass die Rekursion terminiert.