Rekursion. Beispiel Fakultät (iterativ) Rekursive Java-Implementierung. Beispiel Fakultät (rekursiv) n! = n
|
|
- Elizabeth Gerber
- vor 7 Jahren
- Abrufe
Transkript
1 Rekursion Beispiel Fakultät (iterativ) Methoden können Methoden aufrufen Methoden können nicht nur andere Methoden aufrufen, sondern auch sich selbst Eine Methode, die sich selbst (direkt oder indirekt) aufruft, nennt man rekursiv Viele Probleme (in der Informatik) lassen sich durch Rekursion besonders einfach und elegant lösen Schon die Beschreibung eines Problems kann interativ oder rekursiv geschehen Das Rad des Theodorus (465 v. Chr.) D 1 : Rechtwinkeliges Dreieck mit Seitenlänge 1 D 2 : Rechtwinkeliges Dreieck Schenkel 1: Hypotenuse von D1 Schenkel 2: Seitenlänge 1... D n : Rechtwinkeliges Dreieck Schenkel 1: Hypotenuse von Dn-1 Schenkel 2: Seitenlänge 1 Mathematisch: Iterative Definition der Fakultät (Faktorielle) n! einer natürlichen Zahl n: n! = n Die Lösung wird durch n-1 hintereinander ausgeführte Multiplikationen gewonnen Schreiben Sie eine Funktion zur Berechnung der Fakultät von n: static long fac(int n) static long fac(int n) { long result = 1; for(int i=2; i<=n; ++i) result *= i; return result; 1 2 Beispiel Fakultät (rekursiv) Rekursive Java-Implementierung Rekursive Definition der Fakultät Zurückführung auf sich selbst Die ersten (n-1) Faktoren des Produkts n! ergeben (n-1)!: 1. n! = (n-1)! n falls n > 1 2. n! = 1 falls n = 1 Das Problem n! zu berechnen wurde auf das gleichartige, aber kleinere Problem (n-1)! zu berechnen zurückgeführt (reduziert) Zweite Zeile ist notwendig, damit man bei der wiederholten Anwendung der ersten Zeile irgendwann zu einem Ende kommt Rekursive Implementierung der Fakultät if(n==1) // Nicht rekursiver Zweig return fact(n-1)*n; // Rekursiver Zweig Beispiel: Aufruf von fact(4) Rekursiver Zweig: 1. fact(4) ruft fact(3) auf, bewahrt den Wert 4 in lokaler Variable n 2. fact(3) ruft fact(2) auf, bewahrt den Wert 3 in lokaler Variable n (verschieden von n aus 1.) 3. fact(2) ruft fact(1) auf, bewahrt den Wert 2 in lokaler Variable n (wiederum neue Variable) Nicht rekursiver Zweig fact(1) gibt den Wert 1 zurück Auf dem Weg nach oben wird der vor dem rekursiven Aufruf ermittelte Wert mit der jeweiligen lokalen Variablen n des Rufers multipliziert und das Ergebnis weiter nach oben gegeben 3 4
2 Auswertung der Rekursion (logisch) Auswertung der Rekursion (Rechner) Jeder Aufruf von fact besitzt eigene lokale Variable Werte sind in der Regel verschieden Lokale Variablen aller gerade laufenden Methoden werden in Methodenkeller verwaltet Die Datenstruktur Keller erlaubt das Speichern und Lesen von Daten Zugriff nur auf zuletzt gespeichertes Datum Keller funktioniert also nach dem Last In First Out (LIFO)- Prinzip Beim Aufruf einer Methode werden ihre lokalen Variablen im Keller abgelegt Beim Beenden einer Methode werden ihre lokalen Variablen aus dem Keller entfernt if(n==1) return fact(n-1)*n; Beispiel: Aufruf von fact(4) if(n==1) return fact(n-1)*n fact(3) if(n==1) return fact(n-1)*n fact(2) if(n==1) return fact(n-1)*n fact(1) n=4 n=3 n=2 if(n==1) return fact(n-1)*n 6 = n=1 Auswertung Pro rekursivem Aufruf eine neue Kopie der lokalen Variablen Beispiel Fakultät Parameter n Lokale Variable result Rückgabewert Nicht sichtbar n result! // Funktion static int fak(int n) { if (n == 1) { { int result =! fak(n-1); return result*n; Im Debugger nachvollziehen 3?? 4?? 1? 1 2?? Manuelle Auswertung Ihre Eingabe Ihr Auftraggeber füllt das aus stack frame // Funktion static int fact(int n ) { if (n == 1) { { int result =! fact(n-1); return result*n; n result! Lokale Variablen Können für Ihre Berechnungen benutzt werden Was geben Sie zurück? Ausfüllen und an Auftraggeber zurückgeben 7 Rekursion: Teile und Herrsche Rekursion: Das Prinzip Teile und Herrsche : Wenn das Problem trivial ist, dann löse es Wenn das Problem nicht trivial ist, dann Zerlege es in kleinere, unabhängige Teilprobleme Löse die (kleineren) Teilprobleme separat Verbinde die Teillösungen zu einer Gesamtlösung Auf Englisch: divide and conquer Abstraktes Schema if(problem ist klein genug ( trivial )) führe nichtrekursiven Zweig aus (löse Problem) führe rekursiven Zweig aus (zerlege Problem) Rekursion liegt auch dann vor, wenn eine Methode p eine andere Methode q aufruft und diese wiederum p aufruft. Unterscheidung: indirekter Rekursion: Methode wird indirekt wieder aufgerufen direkte Rekursion: Methode ruft sich (direkt) selbst wieder auf 8
3 Vergleich: Iteration und Rekursion Beispiel: Eleganz von Rekursion (ggt) Iteration Rekursion static int fact(int n) { int result = 1; for (int i=2; i<=n; ++i) { result *= i; return result; Kein Funktionsaufruf der Funktion, die definiert wird Explizite Zustandsverwaltung in lokaler Variablen Schleifen Kein inhärenter Effizienzunterschied static int fact(int n) { if (n==1) return fact(n-1)*n; Funktionsaufruf der Funktion, die definiert wird Implizite Zustandsverwaltung durch verschiedene Instanzen der Parametervariablen Keine Schleifen Iterative Lösung // Kurz?! static int ggt(int x, int y) { int rest; do { rest = x%y; x = y; y = rest; while (y!=0) return x; Rekursive Lösung // Kuerzer static int ggt(int x, int y) { int rest = x%y; if(rest==0) return y; return ggt(y,rest); // Noch kuerzer static int ggt(int x, int y) { if(x%y==0) return y; return ggt(y,x%y); 9 10 Endrekursion Von Endrekursion nach Iterativ Algorithmus ist endrekursiv falls Rekursiver Aufruf die letzte Anweisung ist und keine weiteren Berechnungen statt finden Ergebnis des rekursiven Aufrufs ist das Ergebnis der gesamten Funktion Umwandeln in endrekursive Funktion meist einfach möglich Mitführen von zusätzlichen Argumenten / Kumulator Sammeln der bisherigen Ergebnisse in Kumulator Kontinuierliche Konstruktion des jeweiligen Zwischenergebnisses Beispiel Fakultät // rekursiv int fact(int n) { if (n == 1) return fact(n-1)*n; // endrekursiv int fact(int n, int akk) { if (n == 1) return akk; return fact(n-1, akk*n); int fact(int n) { return fact(n, 1); Automatische Überführung von Endrekursiv nach Iterativ möglich Solange nicht der tiviale Fall Berechne den Wert der neuen Aufrufparameter Beispiel: Fakultät Solange nicht n==1 Berechne den neuen Parameter akk aus altem akk*n Berechne den neuen Parameter n aus altem n-1 Umwandlung nicht endrekursiver Algorithmen ist schwieriger Lokale Variablen selbst verwalten (Stapel) Jeder rekursive Algorithmus ist in einen iterativen überführbar Stapel Variablen entspricht Abarbeitung auf Maschine // endrekursiv int fact(int n, int akk) { if (n == 1) return akk; return fact(n-1, akk*n); // iterativ int fact(int n, int akk) { while (n!= 1) { akk = akk * n; n = n - 1; return akk; 11 12
4 Verzweigte Rekursion (Beispiel: Fibonacci) Der italienische Mathematiker Leonardo von Pisa besser bekannt unter dem Namen Fibonacci (Kurzform von Filius Bonaccii ) fragte sich eines Tages, wieviele Kaninchen in einem eingezäunten Gehege pro Jahres geboren werden, wenn man davon ausgeht, dass Berechnung der Fibonacci-Zahlen Variante 1 (ineffizienter Algo.) Variante 2 (effizienter Algorithmus) static int fibo(int n) { int fibo(int n, int a, int b) { if(n==0!n==1) if(n==0) return n; return a; jeden Monat jedes Paar ein weiteres Paar erzeugt return fibo(n-1)+fibo(n-2); Kaninchen zwei Monate nach Geburt geschlechtsreif sind alle Kaninchen unsterblich sind Mit Fn = Anzahl der Kaninchen Paare nach n Monaten gilt F0=0, F1=1 und Fn=Fn-1+Fn-2 Aufruf von fibo(n) erzeugt knapp n*n Funktionsaufrufe Die durch die Folge F0=0, F1=1 und Fn=Fn-1+Fn-2 definierten Zahlen heißen Fibonacci-Zahlen Die ersten Fibonacci-Zahlen lauten Zwei Basisfälle (triviale Fälle) Zweifach rekursiver Aufruf Wiederholte Berechnung bereits berechneter Werte return fibo(n-1, b, a+b); Aufruf von fibo(n, 0, 1) erzeugt n+1 Funktionsaufrufe Bei 0.01sec pro Funktionsaufruf benötigt fibo(40, 0, 1) ca. 0.4sec Iterative Lösung: Bei 0.01sec pro Funktionsaufruf benötigt fibo(40) ca. 16sec int fibo(int n) { int[] f = new int[n+1]; f[0] = 0; f[1] = 1; for(int i=2; i<=n; ++i) f[i] = f[i-1] + f[i-2]; 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377,... return f[n]; 13 Beispiel: Türme von Hanoi (dramatisch) Edouard Anatole Lucas, ein französischer Mathematiker, erzählte 1883 folgende Legende: In einem Tempel im indischen Benares ruht eine Messingplatte in der drei Diamantnadeln befestigt sind. Auf einer der Nadeln hat Gott 64 Scheiben aus Gold zu einem Turm aufgeschichtet, wobei jede Scheibe etwas kleiner ist, als die Scheibe auf der sie ruht. Die Priester des Tempels sind Tag und Nacht damit beschäftigt, den Turm unter Beachtung der folgenden heiligen Regeln auf eine der anderen Nadeln zu bewegen. Die Scheiben sind so kostbar, dass sie nur auf den drei Diamantnadeln im Tempel aufgeschichtet werden dürfen. Die Scheiben sind schwer und zerbrechlich, daher darf immer nur eine der Scheiben bewegt werden, niemals mehrere zur gleichen Zeit. Niemals darf eine Scheibe auf einer kleineren Scheibe liegen. 14 Türme von Hanoi (realistisch) Türme aus Scheiben unterschiedlicher Größe Quelle Arbeitsbereich Ziel Drei Stangen Quelle Ziel Arbeitsbereich Bewege den Turm von der Quelle zum Ziel, wobei Nur die oberste Scheibe bewegt werden darf Sobald alle 64 Scheiben von der Nadel, auf die sie Gott bei der Erschaffung der Welt gesetzt hat, auf eine der anderen Nadeln gesetzt sind, wird der Tempel zusammen mit der Welt in einem Donnerschlag untergehen. 15 Nie eine größere auf einer kleineren Scheibe liegen darf 16
5 Türme von Hanoi (praktisch) Türme von Hanoi (algorithmisch) Rekursive Lösung Falls nur eine Scheibe (n=1) Bewege Scheibe von Quelle nach Ziel Falls mehrere Scheiben (n>1) 1. Bewege Turm aus den n-1 obersten Scheiben zum Arbeitsbereich 2. Bewege n-te Scheibe zum Ziel 3. Bewege Turm aus n-1 obersten Scheiben vom Arbeitsbereich zum Ziel 3 7 Wieviele Züge erfordert die Lösung? x n = Anzahl Züge, um n Scheiben von einer Stange auf eine andere zu bewegen Nach obiger Strategie x 1 =1 und x n =x n-1 +1+x n-1 =2x n-1 +1 für n=2,3,... Also x n = 2 n-1 +2 n = 2 n Flinke Mönche (1 Sekunde pro Scheibenwechsel) brauchen für die 64 Scheiben also = sec oder rund 580Milliarden Jahre Türme von Hanoi (in Java) Türme von Hanoi (iterativ I) static void hanoi(int n, int src, int work, int dest ) { if(n==1) { System.out.print("Bewege Scheibe von "); System.out.println(src + " nach " + dest); { hanoi(n-1, src, dest, work); System.out.print("Bewege Scheibe von "); System.out.println(src + " nach " + dest); hanoi(n-1, work, src, dest); static void hanoi(int n, int src, int work, int dest ) { if(n>1) hanoi(n-1, src, dest, work); System.out.print("Bewege Scheibe von "); System.out.println(src + " nach " + dest); if(n>1) hanoi(n-1, work, src, dest); 19 static void hanoiiterative(int n)"{" // n has to be greater than 1 int [][] bars = new int[3][n+1]; // src, work, dest bar, containing discs int [] lastpos = {n, 0, 0; // start configuration" int possdisc = 0; // smallest disc is on source for (int i=0; i<n+1; ++i) bars[0][i] = n+1-i; // put discs on source bar (n+1 avoid tests) bars[1][0] = n+1; bars[2][0] = n+1; // init work & dest (n+1 avoid empty bar test) while(bars[2][n]!=1) {" // while not al of the discs at destination // put smallest disc to the right System.out.printf("Smallest disc from %d to %d\n", possdisc, (possdisc+1)%3); bars[possdisc][lastpos[possdisc]--] = 0;" possdisc = (possdisc+1)%3;" bars[possdisc][++lastpos[possdisc]] = 1; // put second smallest disc to only possible destination"(cycle through list) int pos1 = (possdisc+1)%3, pos2 = (possdisc+2)%3; if (bars[pos1][lastpos[pos1]] > bars[pos2][lastpos[pos2]]) { System.out.printf(" > Disc from %d to %d\n", pos2, pos1); bars[pos1][++lastpos[pos1]] = bars[pos2][lastpos[pos2]]; bars[pos2][lastpos[pos2]--] = 0; if (bars[pos1][lastpos[pos1]] < bars[pos2][lastpos[pos2]]) { System.out.printf(" > Disc from %d to %d\n", pos1, pos2); bars[pos2][++lastpos[pos2]] = bars[pos1][lastpos[pos1]]; bars[pos1][lastpos[pos1]--] = 0; 20
6 Türme von Hanoi (iterativ II) Türme von Hanoi (künstlerisch) static void hanoiiterative2(int n) { int [][] bars = new int[3][n+1]; // src, work, dest bar int [] last = {n, 0, 0; // start configuration int ps=0, pos1, pos2; // smallest disc on source" for (int i=0; i<n+1; ++i) bars[0][i] = n+1-i; // (n+1 avoid tests) bars[1][0] = n+1; bars[2][0] = n+1; // init work & dest while(bars[2][n]!=1) { System.out.printf("Smallest disc from %d to %d\n", ps, (ps+1)%3); bars[ps][last[ps]--] = 0; // smallest disc to the right ps = (ps+1)%3; bars[ps][++last[ps]] = 1; pos2 = (bars[(ps+1)%3][last[(ps+1)%3]]>bars[(ps+2)%3][last[(ps+2)%3]])? (ps+2)%3 : (ps+1)%3; // disc to only possible place pos1 = 2*(pS+pos2) % 3; if (bars[pos1][last[pos1]]!= bars[pos2][last[pos2]]) { System.out.printf(" > Disc from %d to %d\n", pos2, pos1); bars[pos1][++last[pos1]] = bars[pos2][last[pos2]]; bars[pos2][last[pos2]--] = 0; Verschachtelte Rekursion Zusammenfassung Rekursion Prinzip Argument des rekursiven Aufrufs wird selbst durch rekursiven Aufruf bestimmt In jeder Programmiersprache mit Rekursion nutzbar Ausführung wieder mit lokalen Variablen und Stapel Beispiel Ackermannfunktion Sehr schnell wachsende Funktion Sehr aufwendige Berechnung int ackermann(int m, int n) { if (m == 0) return n+1; if (n == 0) return ackermann(m-1, 1); return ackermann(m-1, ackermann(m,n-1)); Rekursion Eine Funktion ruft sich selbst (direkt oder indirekt) auf Die Rekursion endet immer bei trivialen Fällen Vorteile der Rekursion Einfache, mächtige, intuitive Darstellung und Formulierung vieler Algorithmen Prinzip der Problemreduktion (Teile und Herrsche) direkt implementierbar Legenden um die Rekursion Rekursion ist immer langsamer Rekursion geht nicht in allen Umgebungen Rekursion braucht man nicht Fakten zur Rekursion Iteration und Rekursion sind gleich ausdrucksstark Alle sinnvollen Programmierumgebungen unterstützen Rekursion Rekursion kann (fast) immer so effizient wie ein iterativer Algorithmus implementiert und ausgeführt werden Ohne Rekursion werden Programm meist länger, unübersichtlicher, unwartbar, teuer, unelegant,
Speicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
MehrVorkurs Informatik WiSe 17/18
Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 10.10.2017 Technische Universität Braunschweig, IPS Überblick Einleitung Türme von Hanoi Rekursion Beispiele 10.10.2017 Dr. Werner Struckmann
MehrProgrammieren I. Methoden-Special Heusch --- Ratz 6.1, Institut für Angewandte Informatik
Programmieren I Methoden-Special Heusch --- Ratz 6.1, 6.2 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Parameterübergabe: Wertkopie -By- public class MethodParameters { public
MehrVorkurs Informatik WiSe 16/17
Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 11.10.2016 Technische Universität Braunschweig, IPS Überblick Einleitung Beispiele 11.10.2016 Dr. Werner Struckmann / Stephan Mielke,
MehrObjektorientierte Programmierung (ZQ1u2B)
Objektorientierte Programmierung (ZQ1u2B) Woche 4 Rekursion Christopher Scho lzel Technische Hochschule Mittelhessen 4. November 2015 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte
MehrRekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die
MehrProgrammieren I. Methoden-Spezial Heusch --- Ratz 6.1, Institut für Angewandte Informatik
Programmieren I Methoden-Spezial Heusch --- Ratz 6.1, 6.2 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Parameterübergabe bei primitivem Datentypen (Wertkopie) public class MethodParameters
MehrRekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die
MehrInhalt. 7 Rekursionen Eine unendliche Geschichte Fakultät Türme von Hanoi Dr.
Inhalt 7 Rekursionen... 7-2 7.1 Eine unendliche Geschichte... 7-2 7.2 Fakultät... 7-3 7.3 Türme von Hanoi... 7-5 Propädeutikum 7-1/6 7 Rekursionen 7.1 Eine unendliche Geschichte >> Es war einmal ein Mann,
MehrEinführung in die Informatik I
Einführung in die Informatik I Fortgeschrittene Rekursion Prof. Dr. Nikolaus Wulff Problematische Rekursion Mittels Rekursion lassen sich Spezifikationen recht elegant und einfach implementieren. Leider
MehrInhalt. 3. Spezielle Algorithmen
Inhalt 0. Rechner und Programmierung für Kommunikationstechniker und Mechatroniker 1. Algorithmen - Wesen, Eigenschaften, Entwurf 2. Darstellung von Algorithmen mit Struktogrammen und Programmablaufplänen
MehrFHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt
Inhalt 1. Einführung 1. Beispiel: Fakultät 2. Beispiel: Zahlenfolge 3. Beispiel: Formale Sprache 4. Unterschied Iteration/Rekursion 2. Rekursive Methoden 1. Beispiel: Fakultät 2. Beispiel: "Türme
MehrInformatik I: Einführung in die Programmierung
Informatik I: Einführung in die Programmierung 7. Albert-Ludwigs-Universität Freiburg Bernhard Nebel 31. Oktober 2014 1 31. Oktober 2014 B. Nebel Info I 3 / 20 Um zu, muss man zuerst einmal. Abb. in Public
MehrRekursive Funktionen
Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?
MehrRekursive Funktionen
Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?
Mehr12. Rekursion Grundlagen der Programmierung 1 (Java)
12. Rekursion Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 24. Januar 2006 Einordnung im Kontext der Vorlesung
MehrGrundlagen der Programmierung
Grundlagen der Programmierung Algorithmen und Datenstrukturen Die Inhalte der Vorlesung wurden primär auf Basis der angegebenen Literatur erstellt. Darüber hinaus sind ausgewählte Teile in Anlehnung an
MehrRekursion. Sie wissen wie man Programme rekursiv entwickelt. Sie kennen typische Beispiele von rekursiven Algorithmen
Rekursion Sie wissen wie man Programme rekursiv entwickelt Sie kennen typische Beispiele von rekursiven Algorithmen Sie kennen die Vor-/Nachteile von rekursiven Algorithmen Einführung 2 von 40 Rekursiver
MehrInhalt. 3. Spezielle Algorithmen
Inhalt 0. Rechner und Programmierung für Kommunikationstechniker und Mechatroniker 1. Algorithmen - Wesen, Eigenschaften, Entwurf 2. Darstellung von Algorithmen mit Struktogrammen und Programmablaufplänen
MehrVorlesung Programmieren
Vorlesung Programmieren 11 Rekursion Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION
MehrLösungsvorschlag Serie 2 Rekursion
(/) Lösungsvorschlag Serie Rekursion. Algorithmen-Paradigmen Es gibt verschiedene Algorithmen-Paradigmen, also grundsätzliche Arten, wie man einen Algorithmus formulieren kann. Im funktionalen Paradigma
MehrEinschub: Anweisungen und Bedingungen für PAP und Struktogramme (1)
Einschub: Anweisungen und Bedingungen für PAP und Struktogramme (1) Anweisungen: Eingabeanweisungen, z.b. Eingabe: x Ausgabeanweisungen, z.b. Ausgabe: Das Maximum ist, max Die Symbole x und max werden
MehrBeim rekursiven Aufruf einer Funktion wird jeweils ein Duplikat der gesamten Funktion im Speicher abgelegt.
Rekursion Unter Rekusion verstehen wir eine Funktion, die sich selbst aufruft. Da sie das nicht immerzu tun kann (das Programm würde ewig laufen) benötigt jeder rekursive Aufruf eine Abbruchbedingung!
MehrAlgorithmen und Datenstrukturen Tafelübung 4. Jens Wetzl 15. November 2011
Algorithmen und Datenstrukturen Tafelübung 4 Jens Wetzl 15. November 2011 Folien Keine Garantie für Vollständigkeit und/oder Richtigkeit Keine offizielle Informationsquelle LS2-Webseite Abrufbar unter:
MehrProgrammieren 1 C Überblick
Programmieren 1 C Überblick 1. Einleitung 2. Graphische Darstellung von Algorithmen 3. Syntax und Semantik 4. Einstieg in C: Einfache Sprachkonstrukte und allgemeiner Programmaufbau 5. Skalare Standarddatentypen
MehrRekursive Funktionen (1)
Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: nn ii nn! = ii=1 für nn > 0
Mehr11. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Mathematische Rekursion. Rekursion in Java: Genauso! Unendliche Rekursion. n!
Mathematische Rekursion 11. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration, Lindenmayer Systeme Viele mathematische Funktionen sind sehr natürlich
Mehr12. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Lernziele. Mathematische Rekursion. Rekursion in Java: Genauso! n! =
Lernziele Sie verstehen, wie eine Lösung eines rekursives Problems in Java umgesetzt werden kann. Sie wissen, wie Methoden in einem Aufrufstapel abgearbeitet werden. 12. Rekursion Mathematische Rekursion,
MehrDatenstrukturen und Algorithmen
Datenstrukturen und Algorithmen VO 708.031 27.10.2011 stefan.klampfl@tugraz.at 1 Wiederholung Wir vergleichen Algorithmen anhand des ordnungsmäßigen Wachstums von T(n), S(n), Asymptotische Schranken: O-Notation:
Mehr2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017
2. Algorithmische Methoden 2.1 Rekursion 18. April 2017 Rekursiver Algorithmus Ein rekursiver Algorithmus löst ein Problem, indem er eine oder mehrere kleinere Instanzen des gleichen Problems löst. Beispiel
Mehrpublic class Test extends MiniJava { public static void main (String [] args) { write(args[0]+args[1]); } } // end of class Test
Manche Funktionen, deren Ergebnistyp void ist, geben gar keine Werte zurück im Beispiel: write() und main(). Diese Funktionen heißen Prozeduren. Das Hauptprogramm hat immer als Parameter ein Feld args
MehrRekursive Funktionen (1)
Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: n i n! = i=1 für n > 0 1 für
MehrJAVA - Rekursion
Übungen Informatik I JAVA - http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 Folie 1 Inhalt Allgemeines Fakultät Fibonacci Türme von Hanoi Übungen Informatik 1 Folie 2 Ein Objekt
MehrStack. Seniorenseminar Michael Pohlig
Stack Seniorenseminar 21.06.2013 Michael Pohlig (pohlig@kit.edu) Übersicht 1. Axiomatik eins Kellers und seine Software- Realisierung 2. Bedeutung der Rekursion in der Mathematik 3. Rekursive Programmierung.
Mehr11. Rekursion, Komplexität von Algorithmen
11. Rekursion, Komplexität von Algorithmen Teil 2 Java-Beispiele: Power1.java Hanoi.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 23. Nov. 2015 Anwendung der Rekursion Rekursiv
MehrInhalt Kapitel 2: Rekursion
Inhalt Kapitel 2: Rekursion 1 Beispiele und Definition 2 Partialität und Terminierung 3 Formen der Rekursion Endständige Rekursion 4 Einbettung 29 Beispiele und Definition Rekursion 30 Man kann eine Funktion
Mehr9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion
Experiment: Die Türme von Hanoi. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration Links Mitte Rechts Mathematische Rekursion Viele mathematische Funktionen
MehrMathematische Rekursion
Rekursion Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die Funktion erscheint in ihrer eigenen Definition. Mathematische Rekursion o Viele mathematische
MehrErste Java-Programme (Scopes und Rekursion)
Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/
Mehr4. Fortgeschrittene Algorithmen 4.1 Rekursion 4.2 Daten und Datenstrukturen 4.3 Bäume
4. Fortgeschrittene Algorithmen 4.1 Rekursion 4.2 Daten und Datenstrukturen 4.3 Bäume 4.1-1 4.1 Rekursion Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines
MehrII.3.1 Rekursive Algorithmen - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.3.1 Rekursive Algorithmen -
MehrNadel 1 Nadel 2 Nadel 3
Die Türme von Hanoi Nadel 1 Nadel 2 Nadel 3 Der französische Mathematiker Edouard Lucas hat 1883 eine kleine Geschichte erfunden, die unter dem Namen Die Türme von Hanoi weltberühmt wurde : Im Großen Tempel
MehrAlgorithmen & Programmierung. Rekursive Funktionen (1)
Algorithmen & Programmierung Rekursive Funktionen (1) Berechnung der Fakultät Fakultät Die Fakultät N! einer nichtnegativen ganzen Zahl N kann folgendermaßen definiert werden: d.h. zur Berechnung werden
MehrKapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration
Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Inhalt Rekursion: Technik Prof. Dr. Günter Rudolph Fakultät
MehrInformatik II Übung 10. Pascal Schärli
Informatik II Übung 0 Pascal Schärli pascscha@student.ethz.ch 09.0.0 Was gibts heute? Best-of Vorlesung: Teile und Herrsche Türme von Hanoi Mergesort O-Notation Vorbesprechung: U0A, - Mergesort U0A Türme
MehrRekursive Algorithmen
Rekursive Algorithmen In der Mathematik sind viele Funktionen rekursiv definiert. Der Begriff der Rekursion beinhaltet, dass zur Definition einer Funktion diese selbst wieder mit benutzt wird, allerdings
MehrC++ - Kontrollstrukturen Teil 2
C++ - Kontrollstrukturen Teil 2 Reiner Nitsch 8417 r.nitsch@fbi.h-da.de Schleife und Verzweigung kombiniert SV initialisieren while(b1) if(b2) w f V1 V2 SV Richtung Ziel verändern Wichtiger Baustein vieler
MehrEinstieg in die Informatik mit Java
1 / 18 Einstieg in die Informatik mit Java Klassenvariablen, Klassenmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 18 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden
MehrGrundlagen der Programmierung WS 15/16 (Vorlesung von Prof. Bothe)
Humboldt-Universität zu Berlin Institut für Informatik Grundlagen der Programmierung WS 15/16 (Vorlesung von Prof. Bothe) Übungsblatt 4: Felder und Rekursion Abgabe: bis 9:00 Uhr am 14.12.2015 über Goya
MehrKlassenvariablen, Klassenmethoden
Einstieg in die Informatik mit Java, Vorlesung vom 11.12.07 Übersicht 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion Klassenmethoden
MehrInstitut fu r Informatik
Technische Universita t Mu nchen Institut fu r Informatik Lehrstuhl fu r Bioinformatik Einfu hrung in die Programmierung fu r Bioinformatiker Prof. B. Rost, L. Richter WS 2013/14 Aufgabenblatt 5 2. Dezember
MehrDatenstrukturen und Algorithmen
Datenstrukturen und Algorithmen VO 708.031 robert.legenstein@igi.tugraz.at 1 Kapitel 2 Algorithmische robert.legenstein@igi.tugraz.at 2 2. Algorithmische 1) Iterative Algorithmen 2) Rekursive Algorithmen
MehrEinführung in die Programmierung Wintersemester 2017/18
Einführung in die Programmierung Wintersemester 2017/18 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Rekursion Inhalt Rekursion: Technik Rekursion
MehrFolgen und Funktionen in der Mathematik
Folgen und Funktionen in der Mathematik Anhand von einigen exemplarischen Beispielen soll die Implementierung von mathematischen Algorithmen in C/C++ gezeigt werden: Reelle Funktionen in C/C++ Diese wird
MehrEinführung in die Programmierung Wintersemester 2010/11
Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Rekursion Inhalt Rekursion: Technik Rekursion
Mehr6 Speicherorganisation
6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrMethoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom
Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon
MehrEinführung in die Informatik I
Einführung in die Informatik I LOOP Programme, rekursive Funktionen und der Turm von Hanoi Prof. Dr. Nikolaus Wulff Berechenbarkeit Mitte des 20. Jahrhunderts beantworteten Pioniere, wie Alan M. Turing
MehrKomplexität von Algorithmen
Komplexität von Algorithmen Prof. Dr. Christian Böhm WS 07/08 in Zusammenarbeit mit Gefei Zhang http://www.dbs.informatik.uni-muenchen.de/lehre/nfinfosw Ressourcenbedarf - Größenordnungen Prozesse verbrauchen
MehrBackus-Notation und Syntaxanalyse
Einführung zur Aufgabengruppe 3 Rekursionen Backus-Notation und Syntaxanalyse Programmierpraktikum 1/5 Rekursionen Beispiel: Eine unendliche Geschichte >> Es war einmal ein Mann, der hatte sieben Söhne.
MehrSoftware Entwicklung 1
Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Lernziele Rekursive Prozeduren zu charakterisieren. Terminierung von rekursiven Prozeduren mit Hilfe von geeigneten Abstiegsfunktionen
MehrAufgabenblatt: Methoden - rekursiv
Aufgabenblatt: Methoden - rekursiv- Seite 1 Aufgabenblatt: Methoden - rekursiv (1.) Wird noch erstellt! Lösen Sie die folgenden Aufgaben indem Sie: - Basis und Rekursive Bedingung formulieren! - die vorgegebene
MehrDatenstrukturen. Mariano Zelke. Sommersemester 2012
Datenstrukturen Mariano Zelke Sommersemester 2012 Mariano Zelke Datenstrukturen 2/19 Das Teilfolgenproblem: Algorithmus A 3 A 3 (i, j bestimmt den Wert einer maximalen Teilfolge für a i,..., a j. (1 Wenn
MehrBeispiel 1: Fakultät
16. Rekursion Beispiel 1: Fakultät Rekursive Definition der Fakultät (Mathematik) n! = 1 falls n=0 n*(n-1)! falls n>0 Programmierung mittels einer rekursiven Funktion in C++ double fakultaet(int n) if
Mehr6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
MehrÜbung zu Algorithmen und Datenstrukturen (für ET/IT)
Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2017 Rüdiger Göbl, Mai Bui Computer Aided Medical Procedures Technische Universität München Fibonacci Zahlen Fibonacci Folge Die Fibonacci
Mehr15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen
453 15. Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen Mathematische Rekursion 454 Viele mathematische Funktionen sind sehr natürlich rekursiv
MehrEinstieg in die Informatik mit Java
1 / 20 Einstieg in die Informatik mit Java Rekursion Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 20 1 Überblick 2 Rekursion 3 Rekursive Sortieralgorithmen 4 Backtracking
MehrAlgorithmen & Programmierung. Rekursive Funktionen (3)
Algorithmen & Programmierung Rekursive Funktionen (3) Türme von Hanoi Türme von Benares / Hanoi 1883 erfand der französische Mathematiker Lucas folgende Geschichte: Im Großen Tempel von Benares, unter
Mehr3AA. Prozeduren und Rekursion Prof. Dr. Wolfgang P. Kowalk Universität Oldenburg WS 2005/2006
3AA Prozeduren und Rekursion 29.11.05 Prof. Dr. Wolfgang P. Kowalk Universität Oldenburg WS 2005/2006 3AA Prozeduren Berechnete Sprungadresse Ausführung bestimmter Anweisungen durch Schleifen Stattdessen:
MehrEinstieg in die Informatik mit Java
1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf
MehrDas Kontrollfluss-Diagramm für Ò ¼ µ:
Das Kontrollfluss-Diagramm für Ò ¼ µ: find0(a,x,n1,n2) t = (n1+n2)/2; no a[t]==x yes no n1==n2 yes return t; no x > a[t] yes return 1; no n1 < t yes return find0(a,x,t+1,n2); return 1; return find0(a,x,n1,t
MehrEinführung in die Programmierung
: Inhalt Einführung in die Programmierung Wintersemester 2009/0 : Technik vs. Iteration Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund 2 Definition (einfache,
MehrRekursive Funktionen und ihre programmtechnische Umsetzung
Rekursive Funktionen und ihre programmtechnische Umsetzung Klaus Kusche, Juli 2012 Inhalt Die Idee und ihre Programmierung Die Abarbeitung zur Laufzeit Die Speicherung der Daten Praktisches & Theoretisches
Mehr4 Rekursionen. 4.1 Erstes Beispiel
4 Rekursionen Viele Algorithmen besitzen sowohl eine iterative als auch eine rekursive Lösung. Sie unterscheiden sich darin, dass die iterative Version meist einen etwas längeren Kode besitzt, während
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrÜbungspaket 22 Rekursive Funktionsaufrufe
Übungspaket 22 Rekursive Funktionsaufrufe Übungsziele: Skript: 1. Technische Voraussetzungen für rekursive Funktionsaufrufe 2. Umsetzung mathematisch definierter Rekursionen in entsprechende C-Programme
MehrProjekt: Der Turm von Hanoi
Projekt: Der Turm von Hanoi als Java Applet... Monika Wojtowiec Michael Gebhard STephan Kambor Dauer ca. 20 min Version 1.01 Gliederung ~> 1. Aufgabenstellung ~> 2. Das Spiel Geschichte Regeln Prinzip
MehrAlgorithmen und Datenstrukturen 04
(17. Mai 2012) 1 Besprechung Blatt 3 Hinweise 2 Induktion Allgemeines Beispiele 3 Rekursion Lineare Rekursion und Endrekursion Entrekursivierung Weitere Rekursionstypen 4 O-Kalkül Allgemein Wichtige Formeln
MehrInhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.
1. Einführung in die Informatik Inhalt 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele Peter Sobe 1 Beispiele für Algorithmen Im folgenden Abschnitt sollen ausgewählte
MehrFunktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen
Funktionen Funktionen erlauben, dem Programmcode hierarchisch zu strukturieren ein Hauptprogramm steuert dabei die Abfolge von Schritten, die einzelnen Schritte können durch Funktionen realisiert werden
MehrInformatik für Schüler, Foliensatz 18 Rekursion
Prof. G. Kemnitz Institut für Informatik, Technische Universität Clausthal 26. März 2009 1/10 Informatik für Schüler, Foliensatz 18 Rekursion Prof. G. Kemnitz Institut für Informatik, Technische Universität
MehrKasparov versus Deep Blue. Till Tantau. Institut für Theoretische Informatik Universität zu Lübeck
Kasparov versus Deep Blue Institut für Theoretische Informatik Universität zu Lübeck 18. Vorlesung zu Informatik A für MLS 14. Dezember 2006 Die Lernziele der heutigen Vorlesung und der Übungen. 1 Das
Mehr8 Anwendung: Suchen. Folge a ganzer Zahlen; Element x. Wo kommt x in a vor?
8 Anwendung: Suchen Gegeben: Gesucht: Folge a ganzer Zahlen; Element x Wo kommt x in a vor? Naives Vorgehen: Vergleiche x der Reihe nach mit a[0], a[1], usw. Finden wir i mit a[i] == x, geben wir i aus.
MehrGrundlagen der Informatik Algorithmen und Komplexität
Grundlagen der Informatik Algorithmen und Komplexität Prof. Dr. Bernhard Schiefer (basierend auf Unterlagen von Prof. Dr. Duque-Antón) bernhard.schiefer@fh-kl.de http://www.fh-kl.de/~schiefer Inhalt Einleitung
MehrAlgorithmen und Datenstrukturen 04
15. November 2011 1 Besprechung Blatt 3 Hinweise 2 Induktion Allgemeines Beispiele 3 Rekursion Allgemeines Lineare Rekursion und Endrekursion Entrekursivierung Weitere Rekursionstypen 4 Backtracking 5
Mehr11. Rekursion. - Wiederholung von Anweisungen: durch Iteration und Rekursion - Anwendungsfälle der Rekursion
11. Rekursion 258 K. Bothe, PI1, WS 2000/01 259 ' ( ) - Wiederholung von Anweisungen: durch Iteration und Rekursion - Anwendungsfälle der Rekursion - induktiv definierte Funktionen - rekursive Problemlösungen
MehrTo know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1
To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1 Rekursion: Beispiele Bier trinken 8-Damen-Problem ipod Shuffle für alle Mitarbeiter Karten
Mehr11. Rekursion, Komplexität von Algorithmen
nwendung der Rekursion 11. Rekursion, Komplexität von lgorithmen Teil 2 Java-eispiele: Power1.java Hanoi.java Rekursiv definierte Funktionen - Fibonacci-Funktion - Fakultät, Potenz -... Rekursiver ufbau
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens aw@awilkens.com Elementare Datenstrukturen Array Linked List Stack Queue Tree (Feld) (Verkettete Liste) (Stapel) (Warteschlange) (Baum) Einschub:
MehrNachklausur Bitte in Druckschrift leserlich ausfüllen!
Übungen zur Vorlesung Informatik für Informationsmanager WS 2005/2006 Universität Koblenz-Landau Institut für Informatik Prof. Dr. Bernhard Beckert Dr. Manfred Jackel Nachklausur 24.04.2006 Bitte in Druckschrift
MehrRekursion. Selbstbezug, rekursive Funktionen, rekursive Prozeduren, Terminierung, Effizienz, Korrektheit, Rekursion und Induktion
Rekursion Selbstbezug, rekursive Funktionen, rekursive Prozeduren, Terminierung, Effizienz, Korrektheit, Rekursion und Induktion Ein kleines Problem Schreiben Sie eine Methode writebin, die eine Dezimalzahl
MehrEinführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)
Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl
Mehr