Rekursion ist ein Lösungsverfahren, bei dem ein Problem auf das gleichartige, aber etwas vereinfachte Problem zurückgeführt wird. In Java ist eine Methode dann rekursiv, wenn in ihrem Deklarationsteil sie selber aufgerufen wird. Damit sich ein rekursives Programm nicht endlos aufruft, braucht es eine Abbruchbedingung ("Verankerung"). Die Turtlegrafik eignet sich hervorragend für die Programmierung von Rekursionen. Es entstehen dabei sehr schöne Bilder. Beispiel 1: Das Zeichnen einer Treppe kann iterativ (mit einer while- oder for-Struktur) oder rekursiv programmiert werden. Bei der rekursiver Lösung wird eine Treppe mit 6 Stufen aus einer Stufe und einer Treppe mit 5 Stufen zusammengesetzt, Treppe mit 5 Stufen kann auf eine Stufe und einer Treppe mit 4 Stufen zurückgeführt werden. In der Methode staircase(n) wird jeweils dieselbe Methode staircase(n - 1) aufgerufen, wobei der Parameter bei jedem neuen Aufruf um 1 kleiner wird.. Wenn die Abbruchbedingung n = 0 erfüllt ist, bricht das Programm ab. |
|
// Tu18.java import ch.aplu.turtle.*; public class Tu18 extends Turtle { public Tu18() { staircase(6); } private void staircase(int n) { if (n == 0) return; step(); staircase(n - 1); } private void step() { forward(20); right(90); forward(20); left(90); } public static void main(String[] args) { new Tu18(); } } |
Beispiel 2: Der binäre Baum
|
|
// Tree.java import ch.aplu.turtle.*; public class Tree extends Turtle { public Tree() { setY(-100); tree(128); } private void tree(int s) { if (s < 8) return; forward(s); left(45); tree(s / 2); right(90); tree(s / 2); left(45); back(s); } public static void main(String[] args) { new Tree(); } } |
Beispiel 3: Quadratmuster |
|
// SquarePattern.java import ch.aplu.turtle.*; public class SquarePattern extends Turtle { public SquarePattern() { hideTurtle(); figure(0, 0, 64); } private void figure(double x, double y, double s) { if (s < 1) { return; } else { setPos(x - s/2, y - s/2); square(s); figure(x + s, y + s, s/2); figure(x - s, y + s, s/2); } } private void square(double s) { for(int i = 0; i < 4; i++) { forward(s); right(90); } } public static void main(String[] args) { new SquarePattern(); } } |
Beispiel 4: Koch-Kurve
|
|
Beispiel 5: Peano
|
|
Weitere bekannte Rekursionen: |