170 likes | 352 Views
Was ist Rekursion? Was sind rekursive Methoden? Worauf muss ich bei Rekursion achten? Wozu braucht man Rekursion?. Rekursion. Was ist Rekursion?. In der Rekursion wird ein Problem vereinfacht, indem es solange in kleinere Teilprobleme zerlegt wird, bis diese so einfach sind, das sie
E N D
Was ist Rekursion? Was sind rekursive Methoden? Worauf muss ich bei Rekursion achten? Wozu braucht man Rekursion? Rekursion
Was ist Rekursion? In der Rekursion wird ein Problem vereinfacht, indem es solange in kleinere Teilprobleme zerlegt wird, bis diese so einfach sind, das sie für sich genommen gelöst werden können. Problem
Was ist Rekursion? Teilprobleme Teilprobleme Teillösungen Teillösungen
Was ist Rekursion? Die einzelnen Lösungen (die sich aus der Abbruch- bedingung ergeben) können dann zu einer Gesamtlösung kombiniert werden. Teillösung
Was ist Rekursion? Gesamt-Lösung Teillösungen Teillösungen Teillösungen Teillösungen
Was sind rekursive Methoden? Rekursive Methoden • Methoden, die sich selbst aufrufen • direkt • indirekt
Was sind rekursive Methoden? Direkt rekursive Methode • Hat im Methodenrumpf einen Aufruf von sich selbst
Was sind rekursive Methoden? Beispiel für direkt rekursive Methode: int methodeP(int zahl) { if (zahl == 0) return 1; return methodeP(zahl - 1)+1; }
Was sind rekursive Methoden? Indirekt rekursive Methode • Ruft sich selbst nicht direkt im eigenen Rumpf auf, sondern ruft eine andere Methode auf, die wiederum die ursprüngliche Methode aufruft. • ! Das kann beliebig komplex (und damit unübersichtlich) geschehen.
Was sind rekursive Methoden? Beispiel für indirekt rekursive Methode: int methodeQ(int zahl) { return methodeP(zahl - 2) + zahl; } int methodeP(int zahl) { if (zahl <= 0) return 1; return methodeQ(zahl - 1) + 1; }
Worauf muss ich bei Rekursion achten? • Wie schon gesehen, ist die Abbruchbedingung sehr wichtig. Ohne sie kommt die Methode in eine Endlosschleife. int methodeP(int zahl) { if (zahl == 0) return 1; //Abbruchbedingung return methodeP(zahl - 1)+1; }
Worauf muss ich bei Rekursion achten? • Was passiert beim obigen Beispiel, wenn ich methodeP mit einem negativen Wert aufrufe? int methodeP(int zahl) { if (zahl == 0) return 1; //Abbruchbedingung return methodeP(zahl - 1)+1; }
Worauf muss ich bei Rekursion achten? • Die Abbruchbedingung fängt diesen Fall nicht ab. Die Methode kommt in eine Endlosschleife. • Lösung: int methodeP(int zahl) { if (zahl <= 0) return 1; //Abbruchbedingung return methodeP(zahl - 1)+1; }
Wozu braucht man Rekursion? • Rekursion und Iteration sind gleich mächtig. • Oft bietet sich die Aufgabenstellung direkt für eine rekursive Lösung an. • Beispiel: Die Fakultätsfunktion (n!)
Wozu braucht man Rekursion? Definition n!: 0! = 1 1! = 1 n! = n * (n-1)!
Wozu braucht man Rekursion? Implementierung mittels Rekursion in Java: int fakN(int n) { if(n == 0) return 1; // 0! = 1 if(n == 1) return 1; // 1! = 1 return n * (fakN(n-1)); // n! = (n-1)! }
Wozu braucht man Rekursion? • Wie man sieht, lässt sich die mathematische Definition leicht rekursiv umsetzen. • Eine entsprechende iterative Lösung hätte mehr Denkarbeit gekostet. • Darum: Rekursion