Die Rekursion

In Java spielt diese Art von Programmierung eine wichtige Rolle, weil durch sie sich wiederholende Abläufe im Programm schneller durchgeführt werden können als mit der uns schon bekannten for-Schleife. Die Rekusrion kann sehr vielseitig eingesetzt werden wie zum Beispiel beim Zeichnen kompliziert aussehender Figuren und Formen. Weiterhin wird die Rekursion in der Mathematik benötigt. So ist man in der Lage ein Programm für die Potenzrechnung oder Fakultät zu schreiben.

Die Rekursion ist eine Methode, die immer wieder die eigene Methode aufruft, bis die Abbruchbedingung erfüllt ist.

Im Grunde genommen ist es relativ einfach solange man den Überblick behält und an jeder Stelle des Programms weiß was es genau macht. Nun wie bewerkstelligt man diese Aufgabe? Also zuerst sollte man die Rekursion deklarieren und ihr Parameter mitgeben. Das sieht dann so wie im Beispiel unten aus.

 

 

 

Beispiel 1   ein lustiges Viereck

 

 Zu Beispiel 1  Einfache Rekursion

Na dann schauen wir uns mal an was da so alles im Quellcode drinsteht. Nehmen wir uns das erste Beispiel namens bspl005. Das rekursive Element finden sie bei public void af(Igel igel, int s). Igel ist hier die im Text weiter unten stehende Klasse, die aber hier nicht weiter erläutert werden soll. Wichtig für sie jetzt zu wissen ist, dass die Klasse Igel dazu dient einen Punkt in alle möglichen Richtungen wandern zu lassen. S ist hier in der Rekursion einer der Eingabeparameter und die Länge, die zurückgelegt wird. Wir lassen den ``Igel`` so lange laufen, bis die Strecke s kleiner als 4 ist if(s<4). Jetzt kommt der interessante Teil. Mit igel.vor(s) geben wir die Anweisung um s nach vorne (oben, wegen Voreinstellung) zu gehen. Danach lassen wir den "Igel" nach links drehenmit igel.drehe(-90). Nun rufen wir die Rekursion wieder auf mit af(igel, s-5) und starten den Ablauf erneut, nur dass s um 5 kleiner ist und der gesamte Vorgang wird wiederhohlt.

 

 

 Beispiel 2  der symetrische Baum

 

Zu Beispiel 2   Doppelte Rekursion

Hier sieht es schon eim wenig komplizierter aus, aber keine Sorge, so schwer ist das nicht. Betrachten wir uns zuerst den Aufruf public void a7(Igel igel, double s). Unser Ziel ist es diesen Baum zu malen und wie sie bereits schon gemerkt haben ist s wieder die Länge und ansonsten bleibt der Rest der Klasse auch gleich. Mit der if-Anweisung sagen wir, dass noch nichts gezeichet solange s > 5. Erst nachdem die Länge unter 5 fällt wird der Baum gezeichnet. So, dann mal ran ans Programm. Igel.drehe(45) gibt den Befehl die Richtun um 45°Grad entgegen den Uhrzeigersinn zu drehen, wobei wir eine voreingestellte Vertikalposition einnehmen. Der ``Igel`` krabbelt nun um s in diese Richtung. Nun kommt der Aufruf a7(igel, s*0.5). Er bewirkt, dass der Igel wieder um 45° nach links dreht, aber nur um die Hälfte nach vorne geht. Das laüft so lange weiter bis die Abbruchbedingung erreicht ist. Nachdem er das abgearbeitet hat springt das Programm in die nächste Zeile geht um -s, bzw um den zuletzt zurückgelegten Weg wieder zurück, dreht um -90° und geht wieder um die Länge s nach vorn. Die Abbruchbedingung wird erfüllt und der ``Igel`` kehrt zurück und wiederholt diesen Abblauf immer wieder. So wird der Baum gezeichnet.

 

Powered by Georg Chalkidis