Rekursion

17
Rekursion Rekursion Was ist Rekursion? Was ist Rekursion? Was sind rekursive Methoden? Was sind rekursive Methoden? Worauf muss ich bei Rekursion achten? Worauf muss ich bei Rekursion achten? Wozu braucht man Rekursion? Wozu braucht man Rekursion?

description

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 - PowerPoint PPT Presentation

Transcript of Rekursion

Page 1: Rekursion

RekursionRekursion

Was ist Rekursion?Was ist Rekursion?

Was sind rekursive Methoden?Was sind rekursive Methoden?

Worauf muss ich bei Rekursion achten?Worauf muss ich bei Rekursion achten?

Wozu braucht man Rekursion?Wozu braucht man Rekursion?

Page 2: Rekursion

Was ist Rekursion?Was ist Rekursion?

In der Rekursion wirdIn der Rekursion wird

ein Problem vereinfacht,ein Problem vereinfacht,

indem es solange inindem es solange in

kleinere Teilproblemekleinere Teilprobleme

zerlegt wird, bis diesezerlegt wird, bis diese

so einfach sind, das sieso einfach sind, das sie

für sich genommenfür sich genommen

gelöst werden können.gelöst werden können.

Problem

Page 3: Rekursion

Was ist Rekursion?Was ist Rekursion?

Teilprobleme

Teillösungen

Teilprobleme

Teillösungen

Page 4: Rekursion

Was ist Rekursion?Was ist Rekursion?

Die einzelnen LösungenDie einzelnen Lösungen

(die sich aus der Abbruch-(die sich aus der Abbruch-

bedingung ergeben)bedingung ergeben)

können dann zu einerkönnen dann zu einer

GesamtlösungGesamtlösung

kombiniert werden.kombiniert werden.Teillösung

Page 5: Rekursion

Was ist Rekursion?Was ist Rekursion?

Gesamt-Lösung

Teillösungen

Teillösungen

Teillösungen

Teillösungen

Page 6: Rekursion

Was sind rekursive Methoden?Was sind rekursive Methoden?

Rekursive MethodenRekursive Methoden

Methoden, die sich selbst aufrufenMethoden, die sich selbst aufrufen

direktdirekt

indirektindirekt

Page 7: Rekursion

Was sind rekursive Methoden?Was sind rekursive Methoden?

Direkt rekursive MethodeDirekt rekursive Methode

Hat im Methodenrumpf einen Aufruf von Hat im Methodenrumpf einen Aufruf von sich selbstsich selbst

Page 8: Rekursion

Was sind rekursive Methoden?Was sind rekursive Methoden?

Beispiel für direkt rekursive Methode:Beispiel für direkt rekursive Methode:

int methodeP(int zahl) {int methodeP(int zahl) {

if (zahl == 0) return 1;if (zahl == 0) return 1;

return methodeP(zahl - 1)+1;return methodeP(zahl - 1)+1;

}}

Page 9: Rekursion

Was sind rekursive Methoden?Was sind rekursive Methoden?

Indirekt rekursive MethodeIndirekt rekursive Methode

Ruft sich selbst nicht direkt im eigenen Ruft sich selbst nicht direkt im eigenen Rumpf auf, sondern ruft eine andere Rumpf auf, sondern ruft eine andere Methode auf, die wiederum die Methode auf, die wiederum die ursprüngliche Methode aufruft.ursprüngliche Methode aufruft.

! Das kann beliebig komplex (und damit ! Das kann beliebig komplex (und damit unübersichtlich) geschehen.unübersichtlich) geschehen.

Page 10: Rekursion

Was sind rekursive Methoden?Was sind rekursive Methoden?

Beispiel für indirekt rekursive Methode:Beispiel für indirekt rekursive Methode:

int methodeQ(int zahl) {int methodeQ(int zahl) {return methodeP(zahl - 2) + zahl;return methodeP(zahl - 2) + zahl;

}}

int methodeP(int zahl) {int methodeP(int zahl) {if (zahl <= 0) return 1;if (zahl <= 0) return 1;return methodeQ(zahl - 1) + 1;return methodeQ(zahl - 1) + 1;

}}

Page 11: Rekursion

Worauf muss ich bei Rekursion Worauf muss ich bei Rekursion achten?achten?

Wie schon gesehen, ist die Wie schon gesehen, ist die Abbruchbedingung sehr wichtig. Ohne sie Abbruchbedingung sehr wichtig. Ohne sie kommt die Methode in eine kommt die Methode in eine Endlosschleife.Endlosschleife.

int methodeP(int zahl) {int methodeP(int zahl) {if (zahl == 0) return 1; //Abbruchbedingungif (zahl == 0) return 1; //Abbruchbedingungreturn methodeP(zahl - 1)+1;return methodeP(zahl - 1)+1;

}}

Page 12: Rekursion

Worauf muss ich bei Rekursion Worauf muss ich bei Rekursion achten?achten?

Was passiert beim obigen Beispiel, wenn Was passiert beim obigen Beispiel, wenn ich methodeP mit einem negativen Wert ich methodeP mit einem negativen Wert aufrufe?aufrufe?

int methodeP(int zahl) {int methodeP(int zahl) {

if (zahl == 0) return 1; //Abbruchbedingungif (zahl == 0) return 1; //Abbruchbedingung

return methodeP(zahl - 1)+1;return methodeP(zahl - 1)+1;

}}

Page 13: Rekursion

Worauf muss ich bei Rekursion Worauf muss ich bei Rekursion achten?achten?

Die Abbruchbedingung fängt diesen Fall Die Abbruchbedingung fängt diesen Fall nicht ab. Die Methode kommt in eine nicht ab. Die Methode kommt in eine Endlosschleife.Endlosschleife.

Lösung:Lösung:

int methodeP(int zahl) {int methodeP(int zahl) {

if (zahl <= 0) return 1; //Abbruchbedingungif (zahl <= 0) return 1; //Abbruchbedingung

return methodeP(zahl - 1)+1;return methodeP(zahl - 1)+1;

}}

Page 14: Rekursion

Wozu braucht man Rekursion?Wozu braucht man Rekursion?

Rekursion und Iteration sind gleich Rekursion und Iteration sind gleich mächtig.mächtig.

Oft bietet sich die Aufgabenstellung direkt Oft bietet sich die Aufgabenstellung direkt für eine rekursive Lösung an.für eine rekursive Lösung an.

Beispiel: Die Fakultätsfunktion (n!)Beispiel: Die Fakultätsfunktion (n!)

Page 15: Rekursion

Wozu braucht man Rekursion?Wozu braucht man Rekursion?

Definition n!:Definition n!:

0! = 10! = 1

1! = 11! = 1

n! = n * (n-1)!n! = n * (n-1)!

Page 16: Rekursion

Wozu braucht man Rekursion?Wozu braucht man Rekursion?

Implementierung mittels Rekursion in Java:Implementierung mittels Rekursion in Java:

int fakN(int n) {int fakN(int n) {

if(n == 0) return 1;if(n == 0) return 1; // 0! = 1// 0! = 1

if(n == 1) return 1;if(n == 1) return 1; // 1! = 1// 1! = 1

return n * (fakN(n-1));return n * (fakN(n-1)); // n! = (n-1)!// n! = (n-1)!

}}

Page 17: Rekursion

Wozu braucht man Rekursion?Wozu braucht man Rekursion?

Wie man sieht, lässt sich die Wie man sieht, lässt sich die mathematische Definition leicht rekursiv mathematische Definition leicht rekursiv umsetzen.umsetzen.

Eine entsprechende iterative Lösung hätte Eine entsprechende iterative Lösung hätte mehr Denkarbeit gekostet.mehr Denkarbeit gekostet.

Darum: Rekursion Darum: Rekursion