|
Algorithmen-Demo
Entrekursion rekursiver Algorithmen
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
1. Tschebyschew-Polynom
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
a) Der rekursive Algorithmus
Der rekursive Algorithmus ist wie folgt definiert:
b) Vorbereitung
Hier werden die rekursiven Aufrufe in einzelnen Zeilen aufgeteilt und in den Variablen T1 und T2 zwischengespeichert. Weiters wird noch eine Änderung vorgenommen, sodass nur mehr eine return-Anweisung existiert.
c) Automatenstruktur
Dabei wird bei jedem rekursiven Aufruf der Algorithmus in einen neuen Zustand unterteilt (1..3).
Nun wird der Algorithmus so gestalltet, dass die Zustände mit einer Schleife nacheinander durchlaufen werden. Er ist aber immernoch rekursiv!
d) Entrekursivierung
Nun wird der Algorithmus entrekursiviert, indem ein rekursiver-Aufruf durch ein sichern der lokalen Variablen in einen Stack-Speicher bzw. ein return eines rekursiven Algorithmuses durch ein zurückladen der lokalen Varialben aus dem Stack ersetzt wird.
Schreibtischtest
Der Stack wird von rechts befüllt bzw. von rechts ausgelesen. Die einzelnen Schritte repräsentieren nicht einen fixen Break-Point im Algorithmus sondern werden erzeugt, wenn Änderungen erfolgt sind. Im 2. Beispiel wurde ein Schreibtischtest gemacht, der immer die Zustände vor dem Schleifendurchlauf eingetragen wurden. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
2. Graphen
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
a) Rekursiver Algorithmus Lösungsidee
Der Algorithmus liefert 1, wenn k=1 ist. Ist k>1, liefert er k mal die Anzahl der Knoten eines Unterzweiges plus k Konten von sich selbst.
Implementierung in Jana
b) Entrekursivierung Vorbereitung
Automatenstruktur
Entrekursivieren
Schreibtischtest für k=4
Der Stack wird von rechts befüllt und von rechts wieder ausgelesen. Jeder Eintrag entspricht dem Zustand vor jedem Schleifendurchlauf. c) Iterativer Algorithmus Lösungsidee
Die Berechnung erfolgt auf einem Bildungsgesetz, wobei die Anzahl der Knoten von n=1..k nacheinander berechnet werden. Ein schneller, einfacher und übersichtlicher iterativer Algorithmus ist somit möglich (siehe Implementierung).
Implementierung in Jana
|