Kann mir irgendjemand ausführlich erklären wie man rekursive Funktion in der Informatik lösen bzw wie man die Funktion beim folgenden Bild aufstellt(fms Logo)?

Bsp.: Baum des Pythagoras (FMS Logo) - (Schule, Mathematik, Informatik)

2 Antworten

Programmatisch lösen? Rekursion heißt ja einfach, dass du eine Funktion immer wieder in sich selbst aufrufst. Die Alternative zur Rekursion ist eine Schleife. 

So könnte man heran gehen:

  1. Die "kleinste" sinnvolle Einheit festlegen, was pro Rekursions- bzw. Schleifendurchgang passieren soll (Maxime dabei: man sollte Dinge nicht redundant tuen)
  2. Wie bei einer Schleife auch einen Abbruchbedingung festlegen. Ansonsten endet die Rekursion in einer Endlosschleife.
  3. Überlegen, welche Parameter die Funktion braucht, um seine Aufgabe erfüllen zu können

Das könnte das Ergebnis dieser Aufgaben sein:

  1. Zeichne ein Rechteck und darauf ein Dreieck pro Durchgang. (Man könnte in einem Schleifendurchgang auch immer nur eine Figur zeichnen, aber dann müsste man einen zusätzlichen Parameter mitgeben, der bestimmt, ob es ein Rechteck oder ein Dreieck aktuell werden soll, das wäre in diesem Beispiel unnötiger Code)
  2. In dem Fall wäre eine Abbruchbedingung eine konstante Zahl an maximal möglichen Durchgängen (dafür definieren wir einen Zähler, der als Parameter immer weiter mit gegeben wird und eine konstante Zahl (maximale Durchgänge))
  3. Ich würde vermuten, dass man 3 Parameter braucht: Den Startpunkt, also die Koordinate des linken unteren Eckes des Quadrats, die Breite des Quadrats und den Zähler. Dann brauchst noch den Winkel Gamma des Dreiecks und die Anzahl maximaler Durchgänge (beides nicht zwingend als Parameter, da ja gleichbleibend)

Wenn man sich das Bild ansieht und man die eigene Bedingung betrachtet "pro Durchgang ein Rechteck und ein Dreieck zeichnen", dann stellt man fest, dass sich in der Funktion eine Gabelung ergibt. Denn nach dem die ersten beiden Figuren gezeichnet wurden, soll jetzt nicht nur an einer sondern an zwei Stellen weitergemacht werden (an den beiden Katheten des Dreiecks). Das ist kein Problem. Wir rufen also uns selbst, also die rekursive Funktion, nicht nur ein sondern gleich zwei mal mit unterschiedlichen Parametern auf. Unterscheiden tun sich die Aufrufe in den Parametern Startpunkt und Breite. Nicht aber im Parameter Zähler. Der wurde von 0 auf 1 erhöht und diese zahl bekommen beide Funktionen mit.

Explizit kannst du die meisten Folgen garnicht lösen, da nicht jedes rekursives Oroblem eine explizite Darstellung besitzt. Eine approximative Lösung ist numerisch gut möglich.
Bei deinem Bild wird auf jedes Quadrat ein Dreieck (immer das gleiche) gesetzt und die beiden freien Ecken des Dreiecks werden zum nächsten Quadrat. Siehe auch Fraktale.