Programmierung » ClassPad 300 » Basic » Abflachen von Rekursion
Abflachen von Rekursion
(Tutorial)
Bei einigen Programmen ist es nötig, das Rekursion eingesetzt wird. Nur da gibt es ein kleines Problem: Der ClassPad
kann zwar Selbst-Aufrufe (d.h. ein Programm kann sich selber aufrufen). Jedoch fehlt eine Rückgabe-Funktion um
Werte aus der tieferen Rekursions-Ebene zurück zu geben.
Dieses kann mit einer Liste dem zugehörigem Index umgangen werden. Bei jedem Aufruf wird dann der Index erhöht.
Nachdem die Funktion wieder zurückgekehrt ist, wird der Index wieder verringert. Dadurch bleibt in jeder Tiefe
im Verlauf des Programmabluafs der aktuelle Index gleich.
Als Beispiel sollen die Fibonacci-Zahlen dienen. Diese kann man rekursiv mit an = an-1 + an-2 und a0 = a1 = 1 berechnen.
Das Start-Programm könnte wie folgt aussehen:
'Name: Fibo 'Parameter: n 'Der Speicher fill(0, 20)F
'Der Index 0
tF 'Parameter weiterreichen F(n) 'Ausgabe ClrText 'tF sollte nun 1 sein Print F
[tF]
Dadurch wird der Speicher (die Liste) und der Index auf 0 gesetzt. Das Programm, welches die Rekursion ausführt könnte dann wie folgt aussehen:
'Name: F 'Parameter: n 'Index erhöhen tF+1tF If n<0 Then Message "Fehler. Negativer Parameter" Stop IfEnd If n=0 or n=1 Then 'Die Start-Werte 1
F
[tF] IfEnd If n>1 Then F(n-1) F(n-2) 'zwei Aufrufe - Index um zwei verringern tF-2
tF 'Berechnen 'F(n-1) + F(n-2) F
[tF+1]+F
[tF+2]
F
[tF] IfEnd
Um nun die Berechnung durchzuführen ruft man das Start-Programm auf. Das tF+1 und tF+2 in der vorletzten Code-Zeile liegt daran, das der "Hilfs-Stack" mit aufsteigendem Index gezählt wird. D.h. eine tiefere Rekursions-Ebene hat einen Höheren Index.
Das folgende Bild zeigt für den Parameter 4 die Belegung des Stacks. Wobei sich das Programm erst bis zur unteren
Ebene selbst aufruft und dann die Werte berechnet. Am Ende bleibt das Start-Programm bei Tiefe 1 stehen.

F
'Der Index
0