Gymnasium Löbau/Vertiefungsklasse 2010/Turtlegrafik (III)
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Java</language>
== Selbstähnlichkeiten ==
Zunächst betrachten wir das nachfolgende Grafikobjekt, das wir als Binärbaum bezeichnen wollen.
Dabei fällt auf, dass jeder Ast wieder ein kleiner Binärbaum ist.<br />
Wir wollen diese ''Selbstähnlichkeit'' zu seiner Beschreibung ausnutzen:<br />
<table>
<tr>
<td width="380" align="center" valign="top">[[Bild:Binärbaum1.gif]]</td>
<td width="920" align="left" valign="top">
<blockquote>
'''Beschreibung:'''
* Der einfachste Binärbaum besteht aus einem Stamm.
* Jeder andere Binärbaum besteht aus einem Stamm sowie einem vereinfachten linken und einem vereinfachten rechten Binärbaum.
</blockquote>
</td>
</tr>
</table>
Wir stellen fest, dass es durchaus sinnvoll sein kann, Objekte mit sich selbst zu beschreiben.<br />
Mit der Turtle-Grafik wollen wir eine gleichwertige Implementation vornehmen. Dazu definieren wir den Baum ''mit sich selbst''.<br />
<table>
<tr>
<td width="380" align="center" valign="top">
<canvas w="380" h="350"></canvas>
</td>
<td width="920" align="left" valign="top">
<code id="53762e8707c45">
public void baum(Object turtle, double x, int n) {
if (n > 0) {
turtle.forward(x);
turtle.left(45);
baum(turtle, 2 * x / 3, n - 1);
turtle.right(90);
baum(turtle, 2 * x / 3, n - 1);
turtle.left(45);
turtle.backward(x);
}
}
</code>
<run id="53762e8707ce2">
canvas1.clear();
turtle1.move(190, 300);
baum(turtle1, 100, 6);
</run>
</td>
</tr>
</table>
Prozeduren, die mit sich selbst definiert werden, heißen ''rekursive''<sup>1)</sup> ''Prozeduren''.<br />
Rekursionen stellen ein ''leistungsstarkes und universelles Konzept'' zur Problemlösung dar.<br />
<sup>1)</sup> recurrere (lat.): "zurücklaufen"