Echte und endständige Rekursionen

Aus ProgrammingWiki
Archivierte Version vom 2012-03-24T08:02:02+00:00. Aktuelle Version

Inhaltsverzeichnis

Rekursionsarten

Echte Rekursion Endständige Rekursion

Eine Prozedur heißt echt rekursiv, wenn das Ergebnis erst im rekursiven Aufstieg ermittelt wird.
Dazu müssen alle aktuellen Wertbindungen vor jedem neuen rekursiven Aufruf gespeichert werden (Stapel / Stack), damit sie im rekursiven Aufstieg zur Verfügung stehen.

Eine Prozedur heißt endständig rekursiv, wenn das Ergebnis bereits nach dem rekursiven Abstieg feststeht.
Häufig wird das aktuelle Ergebnis in einer zusätzlichen Akkumulatorvariablen mitgeführt. Die aufwändige Stapelverwaltung entfällt.
Endständige Rekursionen bezeichnet man deshalb auch als Iterationen.

Beispiel:
Trace-Modus:
Beispiel:
Trace-Modus:

Trichtermodell der internen Abläufe:

Echte_Rekursion1.gif

Trichtermodell der internen Abläufe:

Endständige_Rekursion1.gif

Beachte: Die mitunter effizientere endständige Rekursion darf zu keinen Zwängen bei der rekursiven Beschreibung von Problemlösungen führen!

Aufgaben

  1. Quadratzahlen

    Eine Liste mit n Quadratzahlen soll generiert werden.

    • Geben Sie eine echt rekursive Lösung an.
    • Implementieren Sie nun eine endständig rekursive Prozedur.
  2. Tower_of_Hanoi.jpg
    Turm von Hanoi

    Turm von Hanoi

    Vermutlich stammt dieses Spiel von dem französischen Mathematiker Édouard Lucas (* 4. April 1842; † 3. Oktober 1891), bei dem ein Turm aus einzelnen Scheiben von A nach B unter Nutzung des Hilfsplatzes H umgesetzt werden soll. Dabei darf immer nur eine Scheibe so bewegt werden, dass eine kleinere auf einer größeren Scheibe liegt.

    Gegeben Sei folgende Implementation:

    Hinweis: Testen Sie die Prozedur mit kleinen Argumenten!

    Tower_of_Hanoi.gif
    Turm von Hanoi mit 3 Scheiben

    • Beschreiben Sie die Spielstrategie (d.h. den Lösungsalgorithmus) verbal.
    • Entscheiden Sie, ob eine echt rekursive oder endständig rekursive Prozedur vorliegt.
    • Ermitteln Sie, wie viele Bewegungen notwendig sind, um einen Turm mit n Scheiben zu versetzen.