Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
q1:java-rekursion [2017/07/11 09:28] – [Aufgabe 6] admin03 | q1:java-rekursion [2017/12/04 08:51] (aktuell) – admin03 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
In Kapitel 9 wurde die Berechnung der Fakultät als Beispiel für die Einführung von Methoden benutzt. Die eigentliche Berechnung erfolgte damals mit Hilfe einer Schleife. Die Berechnung der Fakultät lässt sich jedoch auch anders auffassen: Fakultät von 20 ist nichts anderes als 20- mal Fakultät von 19, Fakultät von 19 ist 19-mal Fakultät von 18, usw. Eine solche Definition setzt allerdings voraus, dass man mindestens einen konkreten Wert der Fakultät kennt (z.B. ist 1!=1). Zusammengefasst mit der Abkürzung fak für Fakultät gilt also | In Kapitel 9 wurde die Berechnung der Fakultät als Beispiel für die Einführung von Methoden benutzt. Die eigentliche Berechnung erfolgte damals mit Hilfe einer Schleife. Die Berechnung der Fakultät lässt sich jedoch auch anders auffassen: Fakultät von 20 ist nichts anderes als 20- mal Fakultät von 19, Fakultät von 19 ist 19-mal Fakultät von 18, usw. Eine solche Definition setzt allerdings voraus, dass man mindestens einen konkreten Wert der Fakultät kennt (z.B. ist 1!=1). Zusammengefasst mit der Abkürzung fak für Fakultät gilt also | ||
- | + | $$fak(n)=n\cdot fak(n-1)$$ und $$fak(1)=1.$$ | |
- | $$fak(n)=n\cdot fak(n-1) und fak(1)=1.$$ | + | |
Eine solche Definition einer Funktion bezeichnet man als rekursiv („rückbezüglich“). Viele Programmiersprachen erlauben die unmittelbare Umsetzung einer solchen Funktionsdefinition. Bei speziellen Sprachen wie PROLOG gibt es überhaupt keine Schleifen, diese müssen dann immer durch rekursive Funktionen nachgebildet werden. | Eine solche Definition einer Funktion bezeichnet man als rekursiv („rückbezüglich“). Viele Programmiersprachen erlauben die unmittelbare Umsetzung einer solchen Funktionsdefinition. Bei speziellen Sprachen wie PROLOG gibt es überhaupt keine Schleifen, diese müssen dann immer durch rekursive Funktionen nachgebildet werden. | ||
Zeile 47: | Zeile 46: | ||
- | {{ : | + | {{ : |
Als komplexeres Problem sollen die sog. „Kinderkreise“ betrachtet werden. Jeder Kreis hat dabei links und rechts zwei Kinder, diese haben wiederum Kinder, usw. Wenn eine gewisse Größe unterschritten wird, gibt es keine Kinder mehr: | Als komplexeres Problem sollen die sog. „Kinderkreise“ betrachtet werden. Jeder Kreis hat dabei links und rechts zwei Kinder, diese haben wiederum Kinder, usw. Wenn eine gewisse Größe unterschritten wird, gibt es keine Kinder mehr: | ||
- | {{ : | + | {{ : |
Diese Grafik soll mit einer rekursiven Methode erstellt werden. | Diese Grafik soll mit einer rekursiven Methode erstellt werden. | ||
Zeile 158: | Zeile 157: | ||
Erstelle ein Java-Programm, | Erstelle ein Java-Programm, | ||
- | ==== Aufgabe 4==== | + | ===== Aufgabe 4===== |
Erkläre die Funktionsweise des folgenden Konsolen-Programms: | Erkläre die Funktionsweise des folgenden Konsolen-Programms: | ||
<code JAVA> | <code JAVA> | ||
Zeile 175: | Zeile 174: | ||
} | } | ||
</ | </ | ||
- | ==== Aufgabe 5 ==== | + | ===== Aufgabe 5 ===== |
Welche Ausgabe erzeugt folgende Methode, wenn man sie mit p(5) aufruft? | Welche Ausgabe erzeugt folgende Methode, wenn man sie mit p(5) aufruft? | ||
<code JAVA> | <code JAVA> | ||
Zeile 190: | Zeile 189: | ||
} | } | ||
</ | </ | ||
- | ==== Aufgabe 6 ==== | + | ===== Aufgabe 6 ===== |
Der Turm von Hanoi ist ein Denkspiel, das aus drei Stäben und einem Turm besteht. Der Turm ist aus n Scheiben aufgebaut, die zu Beginn auf dem ersten Stab aufgefädelt sind, so dass die Scheibengröße von unten nach oben abnimmt: | Der Turm von Hanoi ist ein Denkspiel, das aus drei Stäben und einem Turm besteht. Der Turm ist aus n Scheiben aufgebaut, die zu Beginn auf dem ersten Stab aufgefädelt sind, so dass die Scheibengröße von unten nach oben abnimmt: | ||
Zeile 204: | Zeile 203: | ||
Schreibe ein rekursives Java-Programm, | Schreibe ein rekursives Java-Programm, | ||
- | ==== Aufgabe 7 ==== | + | ===== Aufgabe 7 ===== |
Es gibt viele weitere grafische Beispiele zur Rekursion. Ein anspruchsvolles Beispiel ist der Baum des Pythagoras (Bundeswettbewerb Informatik 1986). Finde heraus, wie er erzeugt wird, und programmiere ihn mit Java! | Es gibt viele weitere grafische Beispiele zur Rekursion. Ein anspruchsvolles Beispiel ist der Baum des Pythagoras (Bundeswettbewerb Informatik 1986). Finde heraus, wie er erzeugt wird, und programmiere ihn mit Java! |