Rekursion Was ist Rekursion? Was sind rekursive Methoden?

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmentheorie 08 – Dynamische Programmierung (1)
Advertisements

Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Rekursionen Erstellt von J. Rudolf im November 2001 /
Imperative Programmierung
der Universität Oldenburg
Der Dreisatz ist eine Verhältnisrechnung, bei der verschieden Größen z
WHILE - Anweisung.
Dynamische Programmierung (2) Matrixkettenprodukt
Prinzipien des Algorithmenentwurfs Backtracking Prof. Dr. Th. Ottmann
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (04 – Entwurfsverfahren) Prof. Th. Ottmann.
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
WS 06/07 Algorithmentheorie 01 - Einleitung Prof. Dr. Th. Ottmann Tobias Lauer.
Geometrisches Divide and Conquer
Die Türme von Hanoi Die Lösungsfindung nach dem Prinzip der Rekursion wird noch einmal textuell und grafisch erläutert
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Die Methode public Knoten einfuegenVor (Datenelement dNeu, Datenelement dVergleich) public Knoten einfuegenVor(Datenelement dNeu, Datenelement dVergleich){
int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0);
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
Thema: Fibonacci-Zahlen
Struktogramme IF-ELSE FOR – Schleife
Rekursion Richard Göbel.
Algorithmen beschreiben
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Programmierung paralleler Algorithmen mit MPI
Guten Nachmittag!.
Wir haben gesehen Das Gerüst ist bei JavaKara fix vorgegeben
Rekursion mit Listen: Quicksort
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
Merge-Sort und Binäres Suchen /10D. Haehn Populäres algorithmisches Lösungsverfahren Populäres algorithmisches Lösungsverfahren Divide: Problem.
Interpreter Seminar Entwurfsmuster Tobias Webelsiep
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Polynome und schnelle Fourier-Transformation
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
Dynamische Programmierung mit Anwendung auf Sequence Alignment Problem
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Christian Mansky Design - Fallstudien Christian Mansky
2.4 Rekursion Klassifikation und Beispiele
Algorithmen und Datenstrukturen Übungsmodul 8
1 Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Dynamische Programmierung.
SWE1 / Übung 10 ( ) Rekursion Binärbäume.
SFZ FN Sj. 13/14 Python 3 Rekursion Inf K1/2 Sj 13/14
 VORBEUGENDE / INDIREKTE METHODEN ?  ODER FOLGENDE DIREKTEN METHODEN:  Physikalische Massnahme ?  Biologische Massnahme?  Biotechnische Massnahme?
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Rekursion-
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Mergesort.
Unterprogramme / Methoden
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Programmiersprachen II Fortsetzung Datenstrukturen Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
2.4 Rekursion Klassifikation und Beispiele
Rekursion – Speicherverwaltung
Der Abschluss einer Schlange
Methoden - rekursiv.
Einführung in die Programmierung
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
 Präsentation transkript:

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

Was ist Rekursion? Problem 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.

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

Was sind 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 