Abstiegsfunktion

eine mathematische Funktion, welche auch in der Informatik genutzt wird

Eine Abstiegsfunktion ist in der Mathematik und in der Informatik eine Funktion, mit der nachgewiesen werden kann, dass eine Rekursion terminiert.

Prinzip Bearbeiten

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 Bearbeiten

Mathematik Bearbeiten

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 Bearbeiten

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.

Siehe auch Bearbeiten