Lernpfad:Rekursion in Java: Unterschied zwischen den Versionen
Thi (Diskussion | Beiträge) |
Thi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 13: | Zeile 13: | ||
| Farbe=#c7d210}} | | Farbe=#c7d210}} | ||
==Erstes Beispiel Rekursion: Fakultät== | ==Erstes Beispiel Rekursion: Fakultät== | ||
Mit der folgenden Methode wird die Fakultät berechnet. | Mit der folgenden Methode wird die Fakultät berechnet. | ||
Die Fakultät ist ein mathematischer Operator und wird durch ein Ausrufezeichen dargestellt | |||
4! = 4*3*2*1; (Das Ausrufezeichen steht dabei hinter der Zahl). | Die Fakultät ist ein mathematischer Operator und wird durch ein Ausrufezeichen dargestellt: | ||
* 4! = 4*3*2*1; (Das Ausrufezeichen steht dabei hinter der Zahl). | |||
In Java wird dieser Operator bzw. diese Funktion nicht zur Verfügung gestellt, deshalb muss sie programmiert werden. | In Java wird dieser Operator bzw. diese Funktion nicht zur Verfügung gestellt, deshalb muss sie programmiert werden. | ||
Der Quelltext für die Methode sieht wie folgt aus: | Der Quelltext für die Methode sieht wie folgt aus: | ||
Zeile 103: | Zeile 105: | ||
==Der Aufrufbaum== | ==Der Aufrufbaum== | ||
Durch einen Aufrufbaum wird die schrittweise Lösung eines Problems dargestellt. Im Aufrufbaum werden die Parameter und die Rückgaben der Methode visualisiert. | [[Datei:PascalTriangleAnimated2.gif]] | ||
Der | Durch einen Aufrufbaum wird die schrittweise Lösung eines Problems dargestellt. Im Aufrufbaum werden die Parameter und die Rückgaben der Methode visualisiert. Gerade bei Methoden mit mehreren rekursiven Aufrufen verdeutlicht der Aufrufbaum die Ausführung. | ||
Der untere Aufrufbaum verdeutlicht die Berechnungen, die für das pascal'sche Dreieck benötigt werden: | |||
[[Datei:02_Rekursion_Aufrufbaum_Pascalsche_Dreieck.PNG|thumb]] | |||
{{Aufgabe:Start}} | {{Aufgabe:Start}} |
Version vom 31. Dezember 2018, 02:18 Uhr
Inhalt Lernpfad Rekursion in Java |
---|
Inhalt bearbeiten |
Einführung Rekursion
In diesem Lernpfad lernst du die Grundlagen der rekursiven Programmierung kennen. Dieses Prinzip wird in vielen Anwendungen verwendet.
Definition: Eine rekursive Methode besteht aus
- einer Abbruchbedingung
- einer Reduktion des Problems
- mindestens einem Aufruf der rekursiven Methode
Erstes Beispiel Rekursion: Fakultät
Mit der folgenden Methode wird die Fakultät berechnet.
Die Fakultät ist ein mathematischer Operator und wird durch ein Ausrufezeichen dargestellt:
- 4! = 4*3*2*1; (Das Ausrufezeichen steht dabei hinter der Zahl).
In Java wird dieser Operator bzw. diese Funktion nicht zur Verfügung gestellt, deshalb muss sie programmiert werden. Der Quelltext für die Methode sieht wie folgt aus:
public int fakultät (int n){
if (n < 2){
return 1;
}else{
return n*fakultät (n-1);
}
}
Aufgabe 1.1: Ordnen Sie den Quelltext-Teilen die einzelnen Bestandteile einer rekursiven Methode zu.
public int fakultät (int n){
if (n < 2){ | Abbruchbedingung | |
return 1; | Abbruch der Rekursion | |
return n*fakultät (n-1); | rekursiver Aufruf | Reduktion des Problems |
Der Aufrufstapel
Intern werden die Methodenaufrufe einer rekursiven Methode auf einem Stapel gespeichert. Die Methoden, die ganz oben auf dem Stapel liegen, werden zuerst abgearbeitet. Danach wird das Resultat der Methode verwendet, um die darunterliegenden Methoden zu berechnen.
Die Methode z | Ergänzen Sie den Aufrufstapel zu dem Methodenaufruf z(5) . | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
public int z(x) {
if (x > 1){
return a + z(x - 2);
}else{
return 1;
}
}
|
|
z(1) | 1 | |||
z(3) | z(3) | 3+1=4 | ||
z(5) | z(5) | z(5) | z(5) | 5+4=9 |
Der Aufrufbaum
Datei:PascalTriangleAnimated2.gif Durch einen Aufrufbaum wird die schrittweise Lösung eines Problems dargestellt. Im Aufrufbaum werden die Parameter und die Rückgaben der Methode visualisiert. Gerade bei Methoden mit mehreren rekursiven Aufrufen verdeutlicht der Aufrufbaum die Ausführung. Der untere Aufrufbaum verdeutlicht die Berechnungen, die für das pascal'sche Dreieck benötigt werden:
Ergänzen Sie den Aufrufbaum zu dem Methodenaufruf z(5) .
public int z(x) {
if (x > 1){
return a + z(x - 2);
}else{
return 1;
}
}