Zwei rekursive Funktionen

Rekursiver Baum und Drachenkurve

 

 

Rekursiver Baum:
Angeregt von der Grafik auf der vorletzten Seite des Begleitmaterials zum BasiCode-Lehrgang im Rundfunk der DDR.

Im Begleitmaterial zum BasiCode-Lehrgang des DDR Rundfunks ist auf der vorletzten Seite eine Grafik abgedruckt, zu der es aber keine Erklärung gibt. Mich hatte schon länger interessiert, wie sie erzeugt wurde, daher suchte ich im Internet, fand sogar ein Programm - doch in LOGO. Dann fragte ich im Robotrontechnik-Forum nach und wenig später postete jemand ein Programm.

 

Dieses habe ich für BasiCode angepasst:

 

Unsere Joyce brauchte wieder eine Sonderbehandlung: Das Listing wird als normales Basic-Programm unter Mallard Basic gestartet; es enthält den (modifizierten) Bascoder, so dass dieser nicht vor-gelanden werden muss.

Damit die Grafik nicht horizontal gestaucht erscheint, nahm ich eine kleine Änderung vor:

Im übertragbaren Teil des rekursiver-Baum-Programms wird vor GOSUB 620 (Setzen eines Punkts) und GOSUB 630 (Zeichnen einer Linie) bei der Zuweisung von HO statt X1/HG 2*X1/HG verwendet, um das gleiche Breite-Höhe-Verhältnis wie auf anderen Computern zu erhalten:

1120 HO=2*X1/HG :VE=1-Y1/VG :GOSUB 620
1125 HO=2*X2/HG :VE=1-Y2/VG :GOSUB 630

Außerdem dient (in beiden Programmen) im Bascoderteil die zweimalige Ergänzung "+.001" dem leichten Versatz der Höhe der Zeichnung nach oben, sonst entstehen durch Rundungsungenauigkeiten teilweise dicker erscheinende horizontale Linien:

655 OHO=MAX(0,HO):OHO=MIN(OHO,0.998):OVE=MAX(0,VE)+0.001:OVE=MIN(OVE,0.995)+0.001:RETURN

         

 

 

Drachenkurve:
Programm aus dem Buch "In BASIC effektiv programmieren - Auch mit Kleinstrechnern" von Horst Völz.

Bei der Suche fand ich in einem DDR-Computerbuch ein weiteres interessantes Programm, es zeichnet die "Drachenkurve". Sie ähnelt vom Prinzip der Peano- und der Hilbert-Kurve: Kleine Strukturen wiederholen sich in den größeren. Es hat, finde ich, eine gewisse Faszination, beim Zeichnen zuzuschauen - sofern der Computer langsam genug ist und die Grafik nicht "in einem Rutsch" auf dem Bildschirm erscheint, wie zum Beispiel unter BBC Basic for Windows.

Auch wieder mit Rekursion:

 

Und auch wieder "normales" BasiCode und PCW-spezifisch (das Programm beinhaltet den angepassten Bascoder und wird als normales Basic-Programm unter Mallard Basic gestartet; der Bascoder muss nicht vor-gelanden werden).

Im übertragbaren Teil des Drachenkurve-Programms wird vor GOSUB 630 (Zeichnen einer Linie) bei der Zuweisung von HO statt (X+A) (X+2*A) verwendet, um das gleiche Breite-Höhe-Verhältnis wie auf anderen Computern zu erhalten:

1425 HO=(X+2*A)/HG+0.2: VE=1-(Y+B)/VG: GOSUB 630: X=X+2*A: Y=Y+B: RETURN
1445 HO=(X+2*A)/HG+0.2: VE=1-(Y+B)/VG: GOSUB 630: X=X+2*A: Y=Y+B: RETURN

Außerdem dient (wie auch beim rekursiver-Baum-Programm) im Bascoderteil die zweimalige Ergänzung "+.001" dem leichten Versatz der Höhe der Zeichnung nach oben, sonst entstehen durch Rundungsungenauigkeiten teilweise dicker erscheinende horizontale Linien:

655 OHO=MAX(0,HO):OHO=MIN(OHO,0.998):OVE=MAX(0,VE)+0.001:OVE=MIN(OVE,0.995)+0.001:RETURN

Nach dem Programmstart wird man aufgefordert eine natürliche Zahl > 0 einzugeben; diese Zahl gibt an, wie oft die Rekursion ausgeführt werden soll, d.h. wie hoch die Verschachtelungstiefe ist. Die Gesamtkurve wird durch die selbstähnliche Wiederholung immer größer, irgendwann reicht die Breite und Höhe der Zeichenfläche nicht mehr aus, wie man durch Probieren leicht erkennen kann.

         

Thomas Rademacher // April 2026