next up previous contents
Nächste Seite: Ein fraktaler Baum Aufwärts: Fraktale Vorherige Seite: Die Kochkurve   Inhalt

Wo liegt der Unterschied?

Bevor wir weitere Linien- (bzw. Wegfraktale) erzeugen, wollen wir das Wesen der Rekursion genauer untersuchen. Die folgenden beiden Programme sind sehr ähnlich; sie unterscheiden sich lediglich im rekursiven Aufruf.

public class Spiral extends Frame {

    static int maxzahl;

    public void paint (Graphics g) {
        Turtle t = new Turtle(this,0,120);
        t.x=150;
        t.y=150;
        spiral(t, 50, 10);
    }

    void spiral(Turtle t, double s, int w) {
        if (s<200) {
            t.fd(s);
            t.rt(90);
            spiral(t, s+w, w);
        }
    }
    
    public static void main (String [] args) {
        Spiral kprog = new Spiral();
        kprog.setTitle("Spirale...");
        kprog.setLocation(100,100);
        kprog.setSize(400,250);
        kprog.show();
    }
}


\includegraphics[width=7cm]{FrSpiral.ps}


\includegraphics[width=7cm]{FrSpirol.ps}

import java.awt.*;
import Turtle.*;

public class Spirol extends Frame {

    static int maxzahl;

    public void paint (Graphics g) {
        Turtle t = new Turtle(this,0,120);
        t.x=150;
        t.y=150;
        spirol(t, 50, 10);
    }

    void spirol(Turtle t, double s, int w) {
        if (s<200) {
            spirol(t, s+w, w);
            t.fd(s);
            t.rt(90);
        }
    }
    
    public static void main (String [] args) {
        Spirol kprog = new Spirol();
        kprog.setTitle("Spirole...(?)");
        kprog.setLocation(100,100);
        kprog.setSize(400,250);
        kprog.show();
    }
}

Offensichtlich beginnt das erste Programm Spiral an der Position $(150,150)$ einen spiraligen Polygonzug zu zeichnen, dessen Teilstrecken größer werden. Das zweite Programm zeichnet beginnend von $(150,150)$ einen Polygonzug, dessen Teilstrecken allmählich kleiner werden. Warum? Wir betrachten dazu die Methode, die sich rekursiv aufruft: spiral() zeichnet zuerst die Polygonteilstrecke und ruft sich dann mit inkrementierter Seitenlänge auf; und zwar so lange, bis die Bedingung (s<200) nicht mehr erfüllt ist. spirol() hingegen ruft sich mit inkrementierer Seitenlänge so lange auf wie die Bedingung (s<200) erfüllt ist. Sobald kein solcher Aufruf mehr erfolgt, wird die erste Strecke (die größte) gezeichnet, der innerste Methodenaufruf geschlossen und der vorletzte Methodenaufruf (mit der vorausgegangenen, um ein Inkrement kleineren Polygonstrecke) beendet, usw. bis schließlich der ursprüngliche Methodenaufruf (mit der allerersten Streckenlänge von 50 Pixel) beendet wird.


next up previous contents
Nächste Seite: Ein fraktaler Baum Aufwärts: Fraktale Vorherige Seite: Die Kochkurve   Inhalt
Alfred Nussbaumer 2003-02-10