Algorithmik 1. Kapitel 8 - Rekursion. Friedrich-Alexander-Universität Erlangen-Nürnberg. Informatik 2/8 Programmiersysteme / Künstliche Intelligenz

Größe: px
Ab Seite anzeigen:

Download "Algorithmik 1. Kapitel 8 - Rekursion. Friedrich-Alexander-Universität Erlangen-Nürnberg. Informatik 2/8 Programmiersysteme / Künstliche Intelligenz"

Transkript

1 Kapitel 8 - Rekursion Algorithmik 1 8. Palindromtest 8.5 Skyline-Problem Teile-und-Herrsche Prof. Dr. Michael Philippsen / Prof. Dr. Herbert Stoyan Friedrich-Alexander-Universität Erlangen-Nürnberg Informatik 2/8 Programmiersysteme / Künstliche Intelligenz Algorithmik 1, WS 2004/05, Folie 8-2 Eine Geschichte Es war einmal ein Mann mit 2 Kindern, die eine Geschichte hören wollten. Der Vater fing an: Es war einmal ein Mann mit Kindern, die eine Geschichte hören wollten. Der Vater fing an: Es war einmal ein Mann mit 4 Kindern, die eine Geschichte hören wollten. Eine Geschichte anfang(x) { return "Es war einmal ein Mann mit "+ x + "Kindern, die eine Geschichte hören wollten."; ueberleit = "Der Vater fing an:"; ende() { return "Und wenn sie nicht gestorben sind,..."; Und wenn Sie nicht gestorben sind, dann leben sie noch heute. Und wenn Sie nicht gestorben sind, dann leben sie noch heute. Und wenn Sie nicht gestorben sind, dann leben sie noch heute. Algorithmik 1, WS 2004/05, Folie 8- Stopp Aufhören! geschichte(x) { Fragezeichen-Operator return anfang(x) + nochlust() Rekursionsschritt? ueberleit + geschichte(x+1) : "" + ende() Algorithmik 1, WS 2004/05, Folie 8-4 Terminierungsbedingung Leere Else -Fall, ohne geschichte-aufruf Nachklappern Rekursive Funktionsdefinition Zentrale Fragen der Rekursion Eine Methode f heißt rekursiv (lat. recurrere), gdw. zur Berechnung von f diese Methode f wieder benutzt wird. f(x) { heißt rekursive Methodendefinition, gdw. f in { auftritt. Unterschied: Im Rumpf von f steht g, im Rumpf von g steht wieder f. Keine rekursive Funktionsdefinition, wohl aber rekursiv. Stichwort: verschränkte Rekursion. Semantik: Zyklische Definitionen sind in der Regel unbefriedigend. Rekursive Funktionen erlangen erst durch ihre spezifische Behandlung der Argumente eine Bedeutung trotz ihrer zyklischen Struktur. Terminierung: Kommt die Berechnung zum Ende? Wiederum ist die spezifische Behandlung der Argumente wichtig. Nicht rekursiver Basis-/Abbruchfall ist erforderlich. Euklids ggt-algorithmus (1. und 4. Vorlesung) war rekursiv. Algorithmik 1, WS 2004/05, Folie 8-5 Algorithmik 1, WS 2004/05, Folie 8-6

2 Fakultätsfunktion (für n>0) 1 falls n=1 n! := n (n-1)! sonst Java-Code: Rekursive Definition long fakultaet(int n) { return (n == 1)? 1 : n*fakultaet(n-1); Terminierungsbedingung Basisfall Rekursionsschritt Nachklappern Java-Code der Fakultätsfunktion long fakultaet(int n) { return (n == 1)? 1 : n*fakultaet(n-1); Ausführung fakultaet(4) 4. fakultaet() 4. 6=24. fakultaet(2). 2= =2 fakultaet(1) 1 Algorithmik 1, WS 2004/05, Folie 8-7 Algorithmik 1, WS 2004/05, Folie 8-8 Nachklappern mit Hilfe der offenen Methodenschachteln Korrekt gemäß Spezifikation? (1) Gegeben: Spezifikation einer Funktion f (im mathematischen Sinne). Gefragt: Berechnet eine in einer Programmiersprache ausgedrückte Funktion f immer f? Für jede Eingabe kann das Ergebnis durch schrittweises Ausführen von f ermittelt werden. Dabei werden Methodenaufrufe im Methodenschachtelmodell ausgewertet. Durch Verallgemeinerung Aussage für alle Eingaben ableiten! Korrektheitsbeweis Rekursion als konstruktive Form der Induktion Rekursionsprinzip Auswertung f(e) für ein e Für einige f(e 0 ) ist der Wert von f ohne weitere Rekursion feststellbar. Versuche einen/mehrere Werte e <e zu finden, so dass sich f(e) leicht berechnen lässt, wenn f(e ) bekannt ist/sind. Induktion (vollständig) Beweis P für alle e Induktionsanfang: Zeige P(e 0 ) für kleinstes Element e 0 Induktionsschluss: Zeige P(e n ) P(e n+1 ) Bedeutung (und oft Terminierung) rekursiver Funktionsdefinitionen läßt sich mit Induktion beweisen. Algorithmik 1, WS 2004/05, Folie 8-9 Algorithmik 1, WS 2004/05, Folie 8-10 Korrekt gemäß Spezifikation? (2) n Fakultätsfunktion mathematisch: n! = Π i=1 i Java-Code long fakultaet(int n) { return (n == 1)? 1 : n*fakultaet(n-1); Nachweis von fakultaet(n) = n! für alle n 1 Induktionsanfang: fakultaet(1) = 1 = Π i=1 i = 1! Induktionsschluss "nn+1": fakultaet(n+1) = (n+1)*fakultaet(n) //Ausführung //Methodenschachtel = (n+1). n! //Induktionsvoraussetzg. n = (n+1). Π i=1 i //Definition von n! n+1 = Π i=1 i //Definition von Π Algorithmik 1, WS 2004/05, Folie 8-11 Terminierungsüberlegungen Terminierung kann für eine einzelne Eingabe nur im Erfolgsfall nachgewiesen werden. Rekursive Berechnung terminiert, wenn es eine Fallunterscheidung im Rumpf der Funktion gibt, bei der mindestens ein Fall keinen rekursiven Aufruf enthält und wenn jeder rekursive Aufruf nach endlich vielen Schritten einen nichtrekursiven Fall erreicht. Algorithmik 1, WS 2004/05, Folie 8-12

3 Skizze für Terminierungsbeweise e 0, e 1, e 2,... sei Argumentfolge der Rekursionsschritte bei Auswertung von f. Finde (ganzzahlige) Terminierungsfunktion t(e i ) und beweise (per Induktion?): t fällt bei jedem Rekursionsschritt streng monoton t ist nach unten beschränkt. Terminierungsbeweis für fakultaet long fakultaet(int n) { return (n == 1)? 1 : n*fakultaet(n-1); Argumentfolge betrachten: x, x-1, x-2,... Terminierungsfunktion finden: t(x) = x Nachweis (für ganzzahlige x>0): t(x) ist auf der Folge der Argumente streng monoton fallend bei jedem Rekursionsschritt (Induktionsbeweis) Bei der impliziten Annahme x ganzzahlig und x>0 ist t(x) nach unten durch 1 beschränkt. Algorithmik 1, WS 2004/05, Folie 8-1 Algorithmik 1, WS 2004/05, Folie 8-14 Der Induktionsgedanke ist ein wesentliches, wenn nicht das essentielle Mittel zum Entwurf von Algorithmen: Bestimme die Lösung für einen Basisfall Zerlege das Problem in ein, zwei oder mehrere einfache Teilprobleme, die entweder direkt oder rekursiv lösbar sind und verknüpfe die Lösung zur Gesamtlösung Beipiel: n! = n. (n-1)! Teilproblem 1: trival Verknüpfung Algorithmik 1, WS 2004/05, Folie 8-15 Teilproblem 2: Rekursiv lösbar Der Fall n wird auf den Fall n-1 zurückgeführt. Die Induktionsannahme wird einmal angewendet. Rekursion am Ende des Rumpfs. Problemspezifikation Gegeben: k Scheiben unterschiedlichen Durchmessers, der Größe nach geordnet auf Position A. Positionen B und C ohne Scheiben. A B C Problem: Verlege Scheiben-Turm von A nach B, wobei jede Scheibe nur einzeln bewegt werden kann, immer nur die oberste Scheibe eines Turmes bewegt werden kann, niemals eine größere Scheibe auf einer kleineren liegen darf und C zur Zwischenablage benutzt werden kann. Algorithmik 1, WS 2004/05, Folie 8-16 Lösungsansatz: Induktionsprinzip (1) Basisfall k=0: keine Scheiben. Trivial, weil sofort fertig. Rückführung auf kleinere Probleme (k>0) Teilproblem 1: Verlege die oberen k-1 Scheiben von Turm von A nach C kleines Problem: rekursiv lösbar Teilproblem 2: Verlege die verbleibende k-te Scheibe von A auf Turm B Triviale Elementaroperation Teilproblem : Verlege die k-1 Scheiben von Turm von C nach B kleines Problem: rekursiv lösbar Verknüpfung: Hintereinanderausführung der Teillösungen Induktionsannahme: Das Problem ist für die Verlegung von k-1 Scheiben lösbar. Gleiche Induktionsannahme nochmals Lösungsansatz: Induktionsprinzip (2) A B C k-1 Scheiben von A nach C 1 Scheibe von A nach B k-1 Scheiben von C nach B Algorithmik 1, WS 2004/05, Folie 8-17 Algorithmik 1, WS 2004/05, Folie 8-18

4 Java-Code public static void hanoi(int scheiben, char start, char ziel, char hilfe) { if (scheiben > 0) { hanoi(scheiben-1, start, hilfe, ziel); System.out.println("Verlege Scheibe " + scheiben + " von " + start + " nach " + ziel); hanoi(scheiben-1, hilfe, ziel, start); //else Fall=Basisfall der Induktion ist leer hanoi(, A, B, C ); > java Hanoi Verlege Scheibe 1 von A nach B Verlege Scheibe 2 von A nach C Verlege Scheibe 1 von B nach C //zwei Scheiben A C Verlege Scheibe von A nach B //größte Scheibe am Ziel Verlege Scheibe 1 von C nach A Verlege Scheibe 2 von C nach B //zweitgrößte Scheibe am Ziel Verlege Scheibe 1 von A nach B //fertig Der Fall k wird auf den Fall k-1 zurückgeführt. Die Induktionsannahme wird doppelt angewendet. Rekursion nicht nur am Ende des Rumpfs. Algorithmik 1, WS 2004/05, Folie 8-19 Algorithmik 1, WS 2004/05, Folie Palindromtest Korrektheit: Beweis per Induktion (kann direkt aus Rekursion abgelesen werden.) Terminierung: Terminierungsfunktion T(x) = x //Anzahl zu verlegender Scheiben Streng monoton fallend (per Induktionsbeweis) Nach unten durch 0 beschränkt Palindrom = Zeichenreihe die vorwärts und rückwärts gelesen gleich ist. Auch die leere Zeichenreihe ist ein Palindrom. Beispiele: ABBA // Palindrom ABB // kein Palindrom LEGINEINESOHELLEHOSENIENIGEL // Palindrom Gesucht: Entscheidungsfunktion, die angibt, ob eine Zeichenreihe ein Palindrom ist, oder nicht. Algorithmik 1, WS 2004/05, Folie 8-21 Algorithmik 1, WS 2004/05, Folie Palindromtest 8. Palindromtest Lösungsansatz: Induktionsprinzip Basisfall: n=0: die leere Zeichenfolge ist Palindrom n=1: die Zeichenfolge mit einem Zeichen ist Palindrom Rückführung auf kleinere Probleme (n>1): Wenn das erste und das letzte Zeichen übereinstimmen, dann Reduktion der Problemgröße um 2: Teste Palindromeigenschaft der Zeichenfolge ohne erstes und letztes Zeichen rekursiv Andernfalls: kein Palindrom Verknüpfung: Fallunterscheidung Der Fall n wird auf den Fall n-2 zurückgeführt. Man benötigt 2 Basisfälle, je einen für gerade und ungerade n. Rekursion nur am Ende des Rumpfs. Java-Code static boolean istpalindrom(string s) { // prueft s auf Palindromeigenschaft return istpalindrom(s, 0, s.length-1); static boolean istpalindrom(string s, int erstes, int letztes){ // prueft Zeichenreihe s[erstes],..., s[letztes] // (einschliesslich) auf Palindromeigenschaft if (erstes >= letztes) return true; // Basisfaelle if (s.charat(erstes)!= s.charat(letztes)) return false; return istpalindrom(s, erstes+1, letztes-1); Korrektheit und Terminierung wieder per Induktion leicht zu beweisen Algorithmik 1, WS 2004/05, Folie 8-2 Algorithmik 1, WS 2004/05, Folie 8-24

5 Ursprüngliche Fragestellung aus dem Jahr 1202 Gegeben sei ein neugeborenes Kaninchenpaar. Jedes Kaninchenweibchen bringt jeden Monat ein neues Paar zur Welt. Junge Kaninchen haben nach 2 Monaten ihre ersten Jungen. Kaninchen sterben nicht. Gesucht: Wie viele Kaninchenpaare gibt es nach 12 Monaten? Ergebnis: 1, 1, 2,, 5, 8, 1, 21, 4, 55, 8.4 Fibonaci-Zahlen Lösungsansatz: Induktionsprinzip Basisfall: n=0: Fib(0) = 1 n=1: Fib(1) = 1 Rückführung auf kleinere Probleme Teilproblem 1: Fib(n-2) Teilproblem 2: Fib(n-1) Verknüpfung: Addition Rekursive Definition: Fib(0) = 1, Fib(1) = 1, Fib(n)=Fib(n-2)+Fib(n-1) Die so genannten Fibonacci-Zahlen spielen in der Informatik an ganz unterschiedlichen Stellen eine Rolle. Algorithmik 1, WS 2004/05, Folie 8-25 / H. Stoyan Der Fall n wird auf zwei kleinere Fälle zurückgeführt. Man benötigt 2 Basisfälle. Rekursion nicht nur am Ende des Rumpfs. Algorithmik 1, WS 2004/05, Folie Fibonaci-Zahlen Java-Code public static int fibonacci(int n) { return ((n==0) (n==1))? 1 : fibonacci(n-1) + fibonacci(n-2); Nachteile der rekursiven Lösung fibonacci(4) fibonacci(2) fibonacci() Korrektheit und Terminierung wieder per Induktion leicht zu beweisen fibonacci(0) fibonacci(1) Algorithmik 1, WS 2004/05, Folie 8-27 Algorithmik 1, WS 2004/05, Folie 8-28 Nachteile der rekursiven Lösung fibonacci(2) fibonacci(0) fibonacci(4) fibonacci(1) fibonacci(1) Wenn man hier das Zwischenergebnis von fibonacci(2) noch hätte, könnte man die neue Berechnung einsparen. fibonacci() fibonacci(2) fibonacci(0) fibonacci(1) werden jeweils erneut ausgewertet! Durchreichen von Zwischenergebnissen public static int fibonacci(int fim1, int fi, int i, int n) { //Zwischenergebnis Fib(i-1) in fim1 // und Fib(i) in fi return (i >= n)? fi : fibonacci(fi, fim1 + fi, i+1, n); public static int fibonacci(int n) { return fibonacci(1,1,1,n); Statt Neuberechung wird (früheres) Teilergebnis verwendet. Diese Darstellung wird Aufrufbaum genannt. Algorithmik 1, WS 2004/05, Folie 8-29 Algorithmik 1, WS 2004/05, Folie 8-0

6 Rekursion bei durchgereichten Zwischenergebnissen fibonacci(1,1,1,4) fibonacci(1,2,2,4) fibonacci(2,,,4) fibonacci(,5,4,4) Zwischenergebnisse rücken auf u. werden zur Berechnung neuer Zwischenergebnisse verwendet. Korrektheit und Terminierung wieder per Induktion leicht zu beweisen Durchreichen von Zwischenergebnissen ist eine grundlegende Programmiermethode Analyse der Rekursion public static int fibonacci(int fim1, int fi, int i, int n) { //Zwischenergebnis Fib(i-1) in fim1 // und Fib(i) in fi return (i >= n)? fi : fibonacci(fi, fim1 + fi, i+1, n); Dann wird das Ergebnis von Methodenschachtel zu Methodenschachtel kopiert. Erst Abstieg bis auf tiefste Rekursionsebene (Basisfall). fibonacci(1,1,1,4) fibonacci(1,2,2,4) fibonacci(2,,,4) fibonacci(,5,4,4) Algorithmik 1, WS 2004/05, Folie 8-1 Algorithmik 1, WS 2004/05, Folie 8-2 / H. Stoyan 8.5 Skyline-Problem Teile-und-Herrsche Iterative Alternative zur Rekursion int fibonacci(int n) { if (n <= 1) return 1; int fim1 = 1; //Zwischenergebnis Fib(i-1) int fi = 1; //Zwischenergebnis Fib(i) for (int i = 2; i <= n; i++) { int temp = fi; fi = fim1 + fi; //Berechnung nächstes Zwischenergebis fim1 = temp; // Aufrücken über temp return fi; Korrektheit und Terminierung wieder per Induktion leicht zu beweisen Wo möglich sollte Iteration statt Rekursion verwendet werden, um Aufwand zu sparen (eine Methodenschachtel reicht aus.) Später mehr dazu. Algorithmik 1, WS 2004/05, Folie 8- Problem: Gegeben: Exakte Lage und Form von diversen rechteckigen Gebäuden einer Stadt Gesucht: Zeichne die zweidimensionale Skyline, wobei verborgene Linien eliminiert werden Gebäude B i wird durch Tripel (L i, H i, R i ) repräsentiert. Dabei stellen L i und R i die Koordinaten der linken bzw. rechten Ecke des Gebäudes dar. H i ist dessen Höhe. Beispiel: (1,11,5) 11 Algorithmik 1, WS 2004/05, Folie Skyline-Problem Teile-und-Herrsche 8.5 Skyline-Problem Teile-und-Herrsche Skyline-Problem am Beispiel Gegeben: Lösung: (1,11,5) (2,6,7) (,1,9) (12,7,16) (14,,25) (19,18,22) (2,1,29) (24,4,28) Lösungsansatz: Induktionsprinzip Basisfall: ein Gebäude ist seine eigene Skyline, also trivial Rückführung auf kleinere Probleme: Teilproblem 1: Skyline für n-1 Gebäude berechnen Teilproblem 2: ein Gebäude: trivial Verknüpfung: übereinanderlegen und neue Skyline koordinatenweise ablesen. Bsp: n-tes Haus: (5,9,26) Im Unterschied zu früheren Beispielen ist Verknüpfung hier recht aufwändig Skyline-Beschreibung: (1,11,,1,9,0,12,7,16,,19,18,22,,2,1,29,0) Skyline (n-1): (1,11,,1,9,0,12,7,16,,19,18,22,,2,1,29,0) Skyline (n): (1,11,,1,9,9, 19,18,22,9,2,1,29,0) Algorithmik 1, WS 2004/05, Folie 8-5 Algorithmik 1, WS 2004/05, Folie 8-6

7 8.5 Skyline-Problem Teile-und-Herrsche Diese Lösung kann als korrekt und terminierend bewiesen werden. Allerdings: Um das Gebäude n hinzuzufügen, muss der Durchlauf durch die Skyline der n-1 Gebäude im schlimmsten Fall n Stellen überprüfen bzw. ändern: Hinzufügen Gebäude n: n Hinzufügen Gebäude n-1: n-1 Hinzufügen Gebäude n-2: n-2 Hinzufügen Gebäude 1: 1 Gesamt: ½ n(n+1) Überprüfungen/Änderungen Bei 16 Gebäuden: 16 17/2 = 16 Schritte Es gibt i.a. mehrere Algorithmen für ein Problem Algorithmik 1, WS 2004/05, Folie Skyline-Problem Teile-und-Herrsche 2. Lösungsansatz, ebenfalls Induktionsprinzip Basisfall: ein Gebäude ist seine eigene Skyline, also trivial Rückführung auf kleinere Probleme: Teilproblem 1: Skyline für n/2 Gebäude berechnen Teilproblem 2: Skyline für restliche n/2 Gebäude berechnen Verknüpfung: Führe die beiden Skylines zusammen. Man spricht von Verschmelzung Beispiel: Algorithmik 1, WS 2004/05, Folie 8-8 Verknüpfung nicht langsamer als im 1-Gebäude-Fall! Schrittweises Durchlaufen beider Skyline-Folgen halber Länge, maximal n Änderungen 8.5 Skyline-Problem Teile-und-Herrsche 2. Lösung kann als korrekt und terminierend bewiesen werden. Schneller: Beispiel: Aufwand T(n) zur Lösung des Problems für n Gebäude vereinfachend: 2er-Potenz T(n) = 2 * T(n/2) + n //Aufteilung 2 halb so große Teilprobleme //n Schritte zur Verknüpfung n = 16 Gebäude: T(16) = 2 * T(8) + 16 = 2 * ( 2 * T(4) + 8) + 16 = 4 * T(4) + 2 * 16 = 4 * (2 * T(2) + 4) + 2 * 16 = 8 * T(2) + * 16 = 16 * T(1) + 4 * 16 = 80 Schritte (statt 16) Algorithmik 1, WS 2004/05, Folie Skyline-Problem Teile-und-Herrsche Allgemein: Die Rekurrenz T(n) = 2. T(n/2) + n, T(1) = 1 hat für 2er Potenzen n die Lösung T(n) = n + n. log 2 (n) //Beispiel: T(16) = *4 = 80 Beweis durch Induktion: Induktionsanfang: T(1) = 1 //trivial Induktionshypothese: Es gilt: T(n/2) = n/2 + n/2. log 2 (n/2) Induktionsschritt: T(n) = 2. T(n/2) + n //nach Definition von T(n) = 2. (n/2 + n/2. log 2 (n/2)) + n //Induktionshypothese = n + n. log 2 (n/2) + n = n + n. (log 2 (n/2) + 1) = n + n. log 2 (n) //nach Definition log 2 Algorithmik 1, WS 2004/05, Folie Skyline-Problem Teile-und-Herrsche 8.5 Skyline-Problem Teile-und-Herrsche Von Problemgröße abhängiger Aufwand Schrittzahl Problemgröße Algorithmik 1, WS 2004/05, Folie 8-41 n(n+1)/2 n+n*log(n,2) Bis n=6 ist der 1. Lösungsansatz besser, dann Umstiegspunkt. Teile-und-Herrsche: = Anwendung des Induktionsprinzips zur Algorithmenkonstruktion Prinzip: Zerlegung des Problems in mehrere (deutlich) kleinere Probleme Lösung dieser durch Rekursion (falls groß genug) Direkte Lösung oder Basisfall, wenn Problem klein genug ist. Hier/meistens: 2 Probleme halber Größe Füge Teillösungen zur Gesamtlösung zusammen, wobei die Verschmelzung relativ wenig Aufwand verursacht Aufwand: Rekurrenz; kann per Induktion nachgewiesen werden. Da es für ein Problem i.a. mehrere Algorithmen gibt, wird uns die Frage nach dem Aufwand und dem besten Algorithmus für ein Problem später noch beschäftigen! Algorithmik 1, WS 2004/05, Folie 8-42

8 Lineare Rekursion = eine rekursive Methodendeklaration f heißt linear rekursiv, wenn in jedem Zweig einer Fallunterscheidung höchstens einmal f aufgerufen wird. Repetitive Rekursion (Rumpf-Rekursion, tail recursion ) = Spezialfall der linearen Rekursion, bei dem der rekursive Aufruf stets als letzte Aktion des Zweigs auftaucht. Sobald die tiefste Rekursionsebene erreicht ist, wird das Ergebnis von Methodenschachtel zu Methodenschachten einfach nur nach oben kopiert, um dann als Gesamtergebnis zurück gegeben zu werden. Repetitive Rekursionen können daher unmittelbar entrekursiviert und durch Schleifen ersetzt werden. Oben am Beispiel der Fibonacci-Zahlen Die lokalen Variablen der Methode werden dann bei jedem Schleifendurchlauf erneut verwendet. Bei Referenz-Aufruf ist Entrekursivierung wegen möglicher Seiteneffekte unter Umständen schwieriger. Schema zur Entrekursivierung rumpfrekursiver Funktionen: Rumpfrekursive Funktion: g(x) falls Präd(x) //nicht-rekursiver Basisfall f(x) = f(r(x)) sonst //rekursiver Aufruf, //modifizierter ( kleinerer ) Parameter Entrekursivierte Fassung: arg = x; //Hilfsvariable while (!Präd(arg)) { arg = r(arg); //modifiziere Parameter return = g(arg); //nicht-rekursiver Basisfall Algorithmik 1, WS 2004/05, Folie 8-4 Algorithmik 1, WS 2004/05, Folie 8-44 Kaskadenartige Rekursion = In einem Zweig einer Fallunterscheidung im Rumpf einer rekursiven Methodendeklaration f treten zwei oder mehr Aufrufe von f auf. Baumartige Aufrufstruktur Lawinenartiges Anwachsen der anfallenden rekursiven Aufrufe Kaskadenartige Rekursion lässt sich nicht (leicht) in Iterationen umwandeln. Siehe oben: Teile-und-Herrsche Verschachtelte Rekursion = die rekursiven Aufrufe treten nicht nur im Rumpf der Methodendeklaration sondern zusätzlich bei den aktuellen Parameterausdrücken auf. int ackermann(int m, int n) { if (m==0) return n+1; else if (n==0) return ackermann(m-1,1); else return ackermann(m-1, ackermann(m, n-1)); Diese Funktion werden Sie in der theoretischen Informatik noch intensiv studieren (Stichwort: Berechenbarkeit). Sie ist nicht mit primitver Rekursion (f(n+1)=h(n,f(n)) ausdrückbar. Sie terminiert immer. Ihre Werte wachsen jedoch bei Vergrößerung der Argumente außerordentlich schnell: ackermann(,) = 61, ackermann(2,4) , ackermann(4,4) Algorithmik 1, WS 2004/05, Folie 8-45 Algorithmik 1, WS 2004/05, Folie 8-46 Anderes Beispiel: iterierte Quersumme Modulo 9 k Sei ù 0 hn = a i 10 i mit 0 a i 9 die Darstellung von n im i=0 Dezimalsystem. Dann ist die iterierte Quersumme Modulo 9: k qsum(n) = ( a i ) % 9 i=0 int qsum(int n) { if (n<9) return n; else if (n==9) return 0; else return qsum(qsum(n/10) + (n%10)); Verschachtelte Rekursionen: Schwer zu beweisende Terminierung Sind in der Praxis unbedeutend. Verschränkte Rekursion: Eine Methodendeklaration f enthält einen Aufruf der Methode g, die wiederum einen Aufruf von f enthält. Im allgemeinen Fall: k Methodendeklarationen. Beispiel: iterierte binäre Quersumme boolean qsumis1(int n) { if (n==0) return false; //Quersumme ist nicht 1 else if ((n%2)==0) return qsumis1(n/2); //wenn gerade, dann muss binäre //Quersumme der Hälfte 1 sein. else return qsumis0(n/2); //wenn ungerade, dann muss bin. //Quersumme der Hälfte 0 sein. //Achtung / ist Div ohne Rest. boolean qsumis0(int n) { //analog Algorithmik 1, WS 2004/05, Folie 8-47 Algorithmik 1, WS 2004/05, Folie 8-48

9 Beispiel: iterierte binäre Quersumme qsumis1(42) boolean qsumis1(int n) { if (n==0) return false; else if ((n%2)==0) return qsumis1(n/2); else return qsumis0(n/2); boolean qsumis0(int n) { if (n==0) return true; else if ((n%2)==0) return qsumis0(n/2); else return qsumis1(n/2); qsumis1(21) qsumis0(10) qsumis0(5) qsumis1(2) qsumis1(1) qsumis0(0) true ggt: repetitive Rekursion Fakultätsfunktion: lineare Rekursion Türme von Hanoi: kaskadenartige Rekursion Palindromtest: repetitive Rekursion Fibonacci-Zahlen: kaskandenartige Rekursion Durchreichen von Zwischenergebnissen liefert repetitive Rekursion umgebaut in Iteration. Skyline-Problem: kaskadenartige Rekursion Hat die Binärdarstellung von 42 eine ungerade Zahl von Einsen? 42 = 2+8+2= binär qsumis1(42) Algorithmik 1, WS 2004/05, Folie 8-49 Algorithmik 1, WS 2004/05, Folie 8-50

Algorithmik 1. Kapitel 8 - Rekursion. Friedrich-Alexander-Universität Erlangen-Nürnberg. Informatik 2/8 Programmiersysteme / Künstliche Intelligenz

Algorithmik 1. Kapitel 8 - Rekursion. Friedrich-Alexander-Universität Erlangen-Nürnberg. Informatik 2/8 Programmiersysteme / Künstliche Intelligenz Kapitel 8 - Rekursion Algorithmik 1 8.2 Türme von Hanoi 8.3 Palindromtest 8.4 Fibonacci-Zahlen 8.5 Skyline-Problem Teile-und-Herrsche Prof. Dr. Michael Philippsen / Prof. Dr. Herbert Stoyan Friedrich-Alexander-Universität

Mehr

Friedrich-Alexander-Universität Erlangen-Nürnberg

Friedrich-Alexander-Universität Erlangen-Nürnberg Algorithmik 1 M. Philippsen, H. Stoyan, Friedrich-Alexander-Universität Erlangen-Nürnberg Informatik 2/8/9 Kapitel 8 - Rekursion 8.1 Einführung der Rekursion 8.2 Türme von Hanoi 8.3 Fibonacci-Zahlen 8.4

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

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

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Technische Universität München Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften

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

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften Ziel: Methoden kennen

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

Kapitel 08: Rekursion und Terminierung Software Entwicklung 1

Kapitel 08: Rekursion und Terminierung Software Entwicklung 1 Kapitel 08: Rekursion und Terminierung Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Rekursion ist eine elegante Strategie zur Problemlösung, die es erlaubt eine Problemstellung

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

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

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12 EINI WiMa Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 11/12 Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@udo.edu http://ls1-www.cs.uni-dortmund.de

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

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

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

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

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

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

Induktion und Rekursion

Induktion und Rekursion Induktion und Rekursion Induktion und Rekursion Sommersemester 2018 Ronja Düffel 16. März 2018 Induktion und Rekursion > Mathematische Beweistechniken > Vollständige Induktion Der kleine Gauß Induktion

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

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

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

Komplexität von Algorithmen

Komplexität von Algorithmen Komplexität von Algorithmen Ziel Angabe der Effizienz eines Algorithmus unabhängig von Rechner, Programmiersprache, Compiler. Page 1 Eingabegröße n n Integer, charakterisiert die Größe einer Eingabe, die

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

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

VL-04: Rekursionsgleichungen. (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger

VL-04: Rekursionsgleichungen. (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger VL-04: Rekursionsgleichungen (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger SS 2017, RWTH DSAL/SS 2017 VL-04: Rekursionsgleichungen 1/37 Organisatorisches Vorlesung: Gerhard Woeginger (Zimmer

Mehr

Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung Dr. Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung WS18/19 https://www.sosy-lab.org/teaching/2018-ws-infoeinf/ Divide et Impera im Römischen

Mehr

Rekursion. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Rekursion. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung https://www.sosy-lab.org/teaching/2017-ws-infoeinf/ WS17/18 Divide et Impera im Römischen

Mehr

Algorithmenbegriff: Berechenbarkeit. Algorithmenanalyse. (Berechnung der Komplexität)

Algorithmenbegriff: Berechenbarkeit. Algorithmenanalyse. (Berechnung der Komplexität) Über-/Rückblick Algorithmenbegriff: Berechenbarkeit Turing-Maschine RAM µ-rekursive Funktionen Zeit Platz Komplexität Algorithmentechniken Algorithmenanalyse (Berechnung der Komplexität) Rekursion Iteration

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

Datenstruktur Baum und Rekursion Software Entwicklung 1

Datenstruktur Baum und Rekursion Software Entwicklung 1 Datenstruktur Baum und Rekursion Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller 1 Datenstruktur Baum Bäume gehören zu den wichtigsten in der Informatik auftretenden Datenstrukturen.

Mehr

Abschnitt 11: Korrektheit von imperativen Programmen

Abschnitt 11: Korrektheit von imperativen Programmen Abschnitt 11: Korrektheit von imperativen Programmen 11. Korrektheit von imperativen Programmen 11.1 11.2Testen der Korrektheit in Java Peer Kröger (LMU München) in die Programmierung WS 16/17 931 / 961

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

Übung zur Vorlesung Berechenbarkeit und Komplexität

Übung zur Vorlesung Berechenbarkeit und Komplexität RWTH Aachen Lehrgebiet Theoretische Informatik Reidl Ries Rossmanith Sanchez Tönnis WS 2012/13 Übungsblatt 7 26.11.2012 Übung zur Vorlesung Berechenbarkeit und Komplexität Aufgabe T15 Entwickeln Sie ein

Mehr

Friedrich-Alexander-Universität Erlangen-Nürnberg

Friedrich-Alexander-Universität Erlangen-Nürnberg Algorithmik 1 M. Philippsen, H. Stoyan, Friedrich-Alexander-Universität Erlangen-Nürnberg Informatik 2/8/9 Kapitel 9 - Algorithmenherleitung durch Induktion 9.1 Induktionsformen 9.2 Beispiel einer Summenformel

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

Theoretische Informatik SS 03 Übung 3

Theoretische Informatik SS 03 Übung 3 Theoretische Informatik SS 03 Übung 3 Aufgabe 1 a) Sind die folgenden Funktionen f : partiell oder total: f(x, y) = x + y f(x, y) = x y f(x, y) = x y f(x, y) = x DIV y? Hierbei ist x DIV y = x y der ganzzahlige

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

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Tag 5 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Methoden Deklaration

Mehr

Induktion und Rekursion

Induktion und Rekursion Induktion und Rekursion Induktion und Rekursion Vorkurs Informatik Theoretischer Teil WS 013/14. Oktober 013 Vorkurs Informatik WS 013/14 1/1 Vollständige Induktion Vorkurs Informatik WS 013/14 /1 Ziel

Mehr

n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays)

n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays) n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation n Spezifikation: Angabe, was ein

Mehr

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Algorithmen und Datenstrukturen"

Algorithmen und Datenstrukturen Lehrstuhl für Medieninformatik Universität Siegen Fakultät IV 9 Rekursion Version: WS 14/15 Fachgruppe Medieninformatik 9.1 9 Rekursion... Motivation: Rekursive Formulierung von Algorithmen führt in vielen

Mehr

Algorithmen und Datenstrukturen"

Algorithmen und Datenstrukturen Lehrstuhl für Medieninformatik Universität Siegen Fakultät IV 9 Rekursion Version: WS 14/15 Fachgruppe Medieninformatik 9.1 9 Rekursion... Motivation: Rekursive Formulierung von Algorithmen führt in vielen

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

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

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

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

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

Algorithmen und Datenstrukturen SS Übungsblatt 1: Grundlagen

Algorithmen und Datenstrukturen SS Übungsblatt 1: Grundlagen Ludwig-Maximilians-Universität München München, 16.04.2018 Institut für Informatik Prof. Dr. Thomas Seidl Anna Beer, Florian Richter Algorithmen und Datenstrukturen SS 2018 Übungsblatt 1: Grundlagen Tutorien:

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

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation Spezifikation: Angabe, was ein Programm tun

Mehr

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum: Berufsakademie Stuttgart / Außenstelle Horb Studienbereich Technik Studiengang Informationstechnik Kurs IT2006, 2.Semester Dozent: Olaf Herden Student: Alexander Carls Matrikelnummer: 166270 Aufgabe: Beschreibung

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

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - ! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation! Spezifikation: Angabe, was ein Programm

Mehr

Programmiertechnik Methoden, Teil 2

Programmiertechnik Methoden, Teil 2 Programmiertechnik Methoden, Teil 2 Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Rekursion Oliver Haase Hochschule Konstanz 2 Definition Was ist Rekursion? Allgemein: Rekursion ist die Definition

Mehr

Praktikum 3 Algorithmik SS Aufgabe 10: Aufgabe 9 ( Skyline-Problem ) weitere Aufgaben folgen. Name:... Matr-Nr:...

Praktikum 3 Algorithmik SS Aufgabe 10: Aufgabe 9 ( Skyline-Problem ) weitere Aufgaben folgen. Name:... Matr-Nr:... Praktikum 3 Algorithmik SS 2007 14052007 Aufgabe 9: Aufgabe 10: Das Skyline-Problem Union-Find-Strukturen weitere Aufgaben folgen Name: Matr-Nr: Datum: Unterschrift des Dozenten (wenn bestanden): Aufgabe

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

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

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation Spezifikation: Angabe, was ein Programm tun

Mehr

Einführung in die Informatik Algorithms II

Einführung in die Informatik Algorithms II Einführung in die Informatik Algorithms II Eigenschaften von Algorithmen Wolfram Burgard Cyrill Stachniss 14.1 Was können Computer berechnen? In Kapitel 1 haben wir gesagt, dass Programme die Umsetzung

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

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

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

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden Teil 2

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden Teil 2 Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik Klassenmethoden Teil 2 Rekursion 2/23 Definition Rekursion, die siehe Rekursion Was ist Rekursion Allgemein: Rekursion ist die Definition

Mehr

Problem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt.

Problem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt. Formale Verifikation von Algorithmen 1.3 Verifikation Problem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt. Bisher nicht möglich

Mehr

Algorithmen und Datenstrukturen SoSe 2008 in Trier. Henning Fernau Universität Trier

Algorithmen und Datenstrukturen SoSe 2008 in Trier. Henning Fernau Universität Trier Algorithmen und Datenstrukturen SoSe 2008 in Trier Henning Fernau Universität Trier fernau@uni-trier.de 1 Algorithmen und Datenstrukturen Gesamtübersicht Organisatorisches / Einführung Grundlagen: RAM,

Mehr

Thomas Gewering Benjamin Koch Dominik Lüke. (geschachtelte Schleifen)

Thomas Gewering Benjamin Koch Dominik Lüke. (geschachtelte Schleifen) Technische Informatik für Ingenieure WS 2010/2011 Musterlösung Übungsblatt Nr. 6 2. November 2010 Übungsgruppenleiter: Matthias Fischer Mouns Almarrani Rafał Dorociak Michael Feldmann Thomas Gewering Benjamin

Mehr

7. Musterlösung zu Mathematik für Informatiker I, WS 2003/04

7. Musterlösung zu Mathematik für Informatiker I, WS 2003/04 7. Musterlösung zu Mathematik für Informatiker I, WS 2003/04 KATHRIN TOFALL Aufgabe 7. (Symmetrischer EEA). (9 Punkte) Ziel dieser Aufgabe ist es zu zeigen, was man gewinnt, wenn man bei der Division mit

Mehr

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 9, Donnerstag 18.

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 9, Donnerstag 18. Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 9, Donnerstag 18. Dezember 2014 (Teile und Herrsche, Mastertheorem) Junior-Prof. Dr.

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

Grundlagen: Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen Technische Universität München Fakultät für Informatik Lehrstuhl für Effiziente Algorithmen Dr. Hanjo Täubig Tobias Lieber Sommersemester 2011 Übungsblatt 1 16. September 2011 Grundlagen: Algorithmen und

Mehr

p Z >1 ist Primzahl, wenn gilt Euklid:

p Z >1 ist Primzahl, wenn gilt Euklid: Grundlegende Tatsachen über den Ring Z Z; +, ist ein nullteilerfreier Ring Divisionseigenschaft a Z, b Z > q, r Z : a = b q + r, r < b Arithmetik Grundlegende Tatsachen über den Ring Z Euklidischer Algorithmus

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

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

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

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

Schleifeninvarianten. Dezimal zu Binär

Schleifeninvarianten. Dezimal zu Binär Schleifeninvarianten Mit vollstandiger Induktion lasst sich auch die Korrektheit von Algorithmen nachweisen. Will man die Werte verfolgen, die die Variablen beim Ablauf eines Algorithmus annehmen, dann

Mehr

2. Algorithmenbegriff

2. Algorithmenbegriff 2. Algorithmenbegriff Keine Algorithmen: Anleitungen, Kochrezepte, Wegbeschreibungen,... Algorithmus: Berechnungsvorschrift, die angibt, wie durch Ausführung bestimmter Elementaroperationen aus Eingabegrößen

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

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Rekursion Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 27 Motivation Beispiel: Fibonacci-Folge

Mehr

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20. Übersicht Datenstrukturen und Algorithmen Vorlesung 5: (K4) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://www-i2.informatik.rwth-aachen.de/i2/dsal12/ 20.

Mehr

Theoretische Informatik. Alphabete, Worte, Sprachen

Theoretische Informatik. Alphabete, Worte, Sprachen Theoretische Informatik Alphabete, Worte, Sprachen Alphabete, Worte, Sprachen 1. Alphabete und Worte Definitionen, Beispiele Operationen mit Worten Induktionsbeweise 2. Sprachen Definition und Beispiele

Mehr

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen Kapitel 10 Komplexität von Algorithmen und Sortieralgorithmen Arrays 1 Ziele Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:

Mehr

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung Funktionale Programmierung 1 Funktionale Programmierung: Vorlesungsüberblick 1. Funktionale Programmierung Prinzipien funktionaler Programmierung Funktionale Programmierung in prozeduralen Sprachen Rekursive

Mehr

1 Das Prinzip der vollständigen Induktion

1 Das Prinzip der vollständigen Induktion 1 1 Das Prinzip der vollständigen Induktion 1.1 Etwas Logik Wir nennen eine Formel oder einen Satz der Alltagssprache eine Aussage, wenn sie wahr oder falsch sein kann. Die Formeln 2 = 3, 2 4, 5 5 sind

Mehr

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

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

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

Induktion und Rekursion

Induktion und Rekursion Mathematische Beweistechniken Vorkurs Informatik SoSe13 10. April 013 Mathematische Beweistechniken Ziel Mathematische Beweistechniken Ziel beweise, dass eine Aussage A(n) für alle n N gilt. Beispiel Für

Mehr

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Zahlentheorie, Arithmetik und Algebra II Benjamin Fischer Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Gliederung Lineare Rekursion BigInteger Chinesischer

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

Technische Universität München WS 2012/13 Fakultät für Informatik Lösungsvorschläge zu Blatt 4 Dr. C. Herzog, M. Maalej 12.

Technische Universität München WS 2012/13 Fakultät für Informatik Lösungsvorschläge zu Blatt 4 Dr. C. Herzog, M. Maalej 12. 4/1 Technische Universität München WS 2012/13 Fakultät für Informatik Lösungsvorschläge zu Blatt 4 Dr. C. Herzog, M. Maalej 12. November 2012 Übungen zu Grundlagen der Programmierung Aufgabe 14 (Lösungsvorschlag)

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