Rekursion. Beispiel Fakultät (iterativ) Rekursive Java-Implementierung. Beispiel Fakultät (rekursiv) n! = n

Größe: px
Ab Seite anzeigen:

Download "Rekursion. Beispiel Fakultät (iterativ) Rekursive Java-Implementierung. Beispiel Fakultät (rekursiv) n! = n"

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

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

Mehr

Vorkurs Informatik WiSe 17/18

Vorkurs 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

Mehr

Programmieren I. Methoden-Special Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Programmieren 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

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs 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,

Mehr

Objektorientierte Programmierung (ZQ1u2B)

Objektorientierte 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

Mehr

Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren

Rekursion. 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

Mehr

Programmieren I. Methoden-Spezial Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Programmieren 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

Mehr

Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren

Rekursion. 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

Mehr

Inhalt. 7 Rekursionen Eine unendliche Geschichte Fakultät Türme von Hanoi Dr.

Inhalt. 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,

Mehr

Einführung in die Informatik I

Einfü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

Mehr

Inhalt. 3. Spezielle Algorithmen

Inhalt. 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

Mehr

FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

FHZ. 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

Mehr

Informatik I: Einführung in die Programmierung

Informatik 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

Mehr

Rekursive Funktionen

Rekursive 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?

Mehr

Rekursive Funktionen

Rekursive 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?

Mehr

12. Rekursion Grundlagen der Programmierung 1 (Java)

12. 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

Mehr

Grundlagen der Programmierung

Grundlagen 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

Mehr

Rekursion. 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 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

Mehr

Inhalt. 3. Spezielle Algorithmen

Inhalt. 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

Mehr

Vorlesung Programmieren

Vorlesung 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

Mehr

Lösungsvorschlag Serie 2 Rekursion

Lö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

Mehr

Einschub: Anweisungen und Bedingungen für PAP und Struktogramme (1)

Einschub: 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

Mehr

Beim rekursiven Aufruf einer Funktion wird jeweils ein Duplikat der gesamten Funktion im Speicher abgelegt.

Beim 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!

Mehr

Algorithmen und Datenstrukturen Tafelübung 4. Jens Wetzl 15. November 2011

Algorithmen 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:

Mehr

Programmieren 1 C Überblick

Programmieren 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

Mehr

Rekursive Funktionen (1)

Rekursive 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

Mehr

11. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Mathematische Rekursion. Rekursion in Java: Genauso! Unendliche Rekursion. n!

11. 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

Mehr

12. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Lernziele. Mathematische Rekursion. Rekursion in Java: Genauso! n! =

12. 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,

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen 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:

Mehr

2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017

2. 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

Mehr

public class Test extends MiniJava { public static void main (String [] args) { write(args[0]+args[1]); } } // end of class Test

public 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

Mehr

Rekursive Funktionen (1)

Rekursive 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

Mehr

JAVA - Rekursion

JAVA - 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

Mehr

Stack. Seniorenseminar Michael Pohlig

Stack. 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.

Mehr

11. Rekursion, Komplexität von Algorithmen

11. 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

Mehr

Inhalt Kapitel 2: Rekursion

Inhalt 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

Mehr

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

9. 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

Mehr

Mathematische Rekursion

Mathematische 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

Mehr

Erste Java-Programme (Scopes und Rekursion)

Erste 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/

Mehr

4. 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. 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

Mehr

II.3.1 Rekursive Algorithmen - 1 -

II.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 -

Mehr

Nadel 1 Nadel 2 Nadel 3

Nadel 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

Mehr

Algorithmen & Programmierung. Rekursive Funktionen (1)

Algorithmen & 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

Mehr

Kapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration

Kapitel 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

Mehr

Informatik II Übung 10. Pascal Schärli

Informatik 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

Mehr

Rekursive Algorithmen

Rekursive 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

Mehr

C++ - Kontrollstrukturen Teil 2

C++ - 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

Mehr

Einstieg in die Informatik mit Java

Einstieg 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

Mehr

Grundlagen der Programmierung WS 15/16 (Vorlesung von Prof. Bothe)

Grundlagen 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

Mehr

Klassenvariablen, Klassenmethoden

Klassenvariablen, 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

Mehr

Institut fu r Informatik

Institut 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

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen 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

Mehr

Einführung in die Programmierung Wintersemester 2017/18

Einfü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

Mehr

Folgen und Funktionen in der Mathematik

Folgen 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

Mehr

Einführung in die Programmierung Wintersemester 2010/11

Einfü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

Mehr

6 Speicherorganisation

6 Speicherorganisation 6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. 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

Mehr

Einführung in die Informatik I

Einfü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

Mehr

Komplexität von Algorithmen

Komplexitä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

Mehr

Backus-Notation und Syntaxanalyse

Backus-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.

Mehr

Software Entwicklung 1

Software 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

Mehr

Aufgabenblatt: Methoden - rekursiv

Aufgabenblatt: 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

Mehr

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Datenstrukturen. 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

Mehr

Beispiel 1: Fakultät

Beispiel 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

Mehr

6 Speicherorganisation

6 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) Ü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

Mehr

15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen

15. 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

Mehr

Einstieg in die Informatik mit Java

Einstieg 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

Mehr

Algorithmen & Programmierung. Rekursive Funktionen (3)

Algorithmen & 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

Mehr

3AA. Prozeduren und Rekursion Prof. Dr. Wolfgang P. Kowalk Universität Oldenburg WS 2005/2006

3AA. 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:

Mehr

Einstieg in die Informatik mit Java

Einstieg 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

Mehr

Das Kontrollfluss-Diagramm für Ò ¼ µ:

Das 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

Mehr

Einführung in die Programmierung

Einfü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,

Mehr

Rekursive Funktionen und ihre programmtechnische Umsetzung

Rekursive 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

Mehr

4 Rekursionen. 4.1 Erstes Beispiel

4 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

Mehr

2. Programmierung in C

2. 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)

Mehr

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap 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

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap 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 Übungspaket 22 Rekursive Funktionsaufrufe Übungsziele: Skript: 1. Technische Voraussetzungen für rekursive Funktionsaufrufe 2. Umsetzung mathematisch definierter Rekursionen in entsprechende C-Programme

Mehr

Projekt: Der Turm von Hanoi

Projekt: 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

Mehr

Algorithmen und Datenstrukturen 04

Algorithmen 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

Mehr

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Inhalt. 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

Mehr

Funktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen

Funktionen. 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

Mehr

Informatik für Schüler, Foliensatz 18 Rekursion

Informatik 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

Mehr

Kasparov versus Deep Blue. Till Tantau. Institut für Theoretische Informatik Universität zu Lübeck

Kasparov 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

Mehr

8 Anwendung: Suchen. Folge a ganzer Zahlen; Element x. Wo kommt x in a vor?

8 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.

Mehr

Grundlagen der Informatik Algorithmen und Komplexität

Grundlagen 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

Mehr

Algorithmen und Datenstrukturen 04

Algorithmen 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

Mehr

11. Rekursion. - Wiederholung von Anweisungen: durch Iteration und Rekursion - Anwendungsfälle der Rekursion

11. 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

Mehr

To 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 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

Mehr

11. Rekursion, Komplexität von Algorithmen

11. 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

Mehr

Algorithmen und Datenstrukturen

Algorithmen 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:

Mehr

Nachklausur Bitte in Druckschrift leserlich ausfüllen!

Nachklausur 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

Mehr

Rekursion. Selbstbezug, rekursive Funktionen, rekursive Prozeduren, Terminierung, Effizienz, Korrektheit, Rekursion und Induktion

Rekursion. 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

Mehr

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einfü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