Objektorientierte Programmierung (ZQ1u2B)
|
|
- Käthe Ritter
- vor 6 Jahren
- Abrufe
Transkript
1 Objektorientierte Programmierung (ZQ1u2B) Woche 4 Rekursion Christopher Scho lzel Technische Hochschule Mittelhessen 4. November 2015
2 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte Rekursion Verschachtelte Rekursion Rekursion und Iteration Tail Recursion Dynamic Programming Exkurs: Versionsverwaltung 2 / 31
3 Rekursion In order to understand recursion, you must understand recursion. 3 / 31
4 Rekursion: Definition Eine Funktion, die sich selbst aufruft, nennt man rekursiv. Rekursive Funktionen bestehen aus: mindestens einem Basisfall, bei dem das Ergebnis sofort feststeht mindestens einem rekursiven Fall Rekursive Methode public float getrootdist() { if(plink == null) { return 0; } return plink.getdist() + plink.getnode().getrootdist(); } 4 / 31
5 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte Rekursion Verschachtelte Rekursion Rekursion und Iteration Tail Recursion Dynamic Programming Exkurs: Versionsverwaltung 5 / 31
6 Rekursion: getrootdist() - Schema Die Abhängigkeit des Rückgabewerts von weiteren Funktionsaufrufen wird durch schrittweise Ausführung aufgelöst, bis man bei den trivialen Basisfällen angelangt. this.getrootdist() 6 / 31
7 Rekursion: getrootdist() - Schema Die Abhängigkeit des Rückgabewerts von weiteren Funktionsaufrufen wird durch schrittweise Ausführung aufgelöst, bis man bei den trivialen Basisfällen angelangt. this.getrootdist() parent.getrootdist() 6 / 31
8 Rekursion: getrootdist() - Schema Die Abhängigkeit des Rückgabewerts von weiteren Funktionsaufrufen wird durch schrittweise Ausführung aufgelöst, bis man bei den trivialen Basisfällen angelangt. this.getrootdist() parent.getrootdist() grandparent.getrootdist() 6 / 31
9 Rekursion: getrootdist() - Schema Die Abhängigkeit des Rückgabewerts von weiteren Funktionsaufrufen wird durch schrittweise Ausführung aufgelöst, bis man bei den trivialen Basisfällen angelangt. this.getrootdist() parent.getrootdist() grandparent.getrootdist()... 6 / 31
10 Rekursion: getrootdist() - Schema Die Abhängigkeit des Rückgabewerts von weiteren Funktionsaufrufen wird durch schrittweise Ausführung aufgelöst, bis man bei den trivialen Basisfällen angelangt. this.getrootdist() parent.getrootdist() grandparent.getrootdist()... root.getrootdist() 6 / 31
11 Rekursion: getrootdist() - Schema Die Abhängigkeit des Rückgabewerts von weiteren Funktionsaufrufen wird durch schrittweise Ausführung aufgelöst, bis man bei den trivialen Basisfällen angelangt. this.getrootdist() parent.getrootdist() grandparent.getrootdist()... 0 root.getrootdist() 6 / 31
12 Rekursion: getrootdist() - Schema Die Abhängigkeit des Rückgabewerts von weiteren Funktionsaufrufen wird durch schrittweise Ausführung aufgelöst, bis man bei den trivialen Basisfällen angelangt. this.getrootdist() parent.getrootdist() grandparent.getrootdist() root.getrootdist() 6 / 31
13 Rekursion: getrootdist() - Schema Die Abhängigkeit des Rückgabewerts von weiteren Funktionsaufrufen wird durch schrittweise Ausführung aufgelöst, bis man bei den trivialen Basisfällen angelangt. this.getrootdist() parent.getrootdist() 7 grandparent.getrootdist() root.getrootdist() 6 / 31
14 Rekursion: getrootdist() - Schema Die Abhängigkeit des Rückgabewerts von weiteren Funktionsaufrufen wird durch schrittweise Ausführung aufgelöst, bis man bei den trivialen Basisfällen angelangt. this.getrootdist() 15 parent.getrootdist() 7 grandparent.getrootdist() root.getrootdist() 6 / 31
15 Rekursion: getrootdist() - Stack 7 / 31
16 Rekursion: getrootdist() - Stack 7 / 31
17 Rekursion: Endlose Rekursion Java PhyloNode a = new PhyloNode("a"); a.setparentlink(new PhyloLink(10, a)); Frage: Was passiert bei Aufruf von a.getdistancetoroot()? 8 / 31
18 Rekursion: Endlose Rekursion Java PhyloNode a = new PhyloNode("a"); a.setparentlink(new PhyloLink(10, a)); Frage: Was passiert bei Aufruf von a.getdistancetoroot()? Output Exception in thread "main" java.lang.stackoverflowerror at PhyloNode.getDistanceToRoot(PhyloNode.java:127) at PhyloNode.getDistanceToRoot(PhyloNode.java:127) at PhyloNode.getDistanceToRoot(PhyloNode.java:127)... 8 / 31
19 Rekursion: Rekursionsarten Es gibt verschiedene Arten von Rekursion: Lineare Rekursion Ein einziger rekursiver Aufruf (bsp. getrootdist()) Verzweigte Rekursion Mehrere rekursive Aufrufe (bsp. Fibonacci, Levenshtein) Verschränkte Rekursion Verschachtelte Rekursion 9 / 31
20 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte Rekursion Verschachtelte Rekursion Rekursion und Iteration Tail Recursion Dynamic Programming Exkurs: Versionsverwaltung 10 / 31
21 Rekursion: Fibonacci - Definition 0 n = 0 fib(n) = 1 n = 1 fib(n 1) + fib(n 2) sonst 0, 1, 1, 2, 3, 5, 8, 13, 21,... beliebtes Beispiel für rekursive Funktionen ursprüngliche Aufgabe: Vermehrung von Hasen Anzahl nach einem Monat = alte Anzahl + Anzahl geschlechtsreifer Paare (min 1 Monat alt) interessante mathematische Eigenschaften Annäherung an goldenen Schnitt 11 / 31
22 Rekursion: Fibonacci - Schema fib(4) fib(2) fib(3) fib(0) fib(1) fib(1) fib(2) fib(0) fib(1) 12 / 31
23 Rekursion: Fibonacci - Schema fib(4) 4>2 4>3 fib(2) fib(3) 2>0 2>1 3>1 3>2 fib(0) fib(1) fib(1) fib(2) 2>0 2>1 fib(0) fib(1) 12 / 31
24 Rekursion: Fibonacci - Stack Heap Stack Method Area Stackframe main Stackframe #2 Stackframe #3 Stackframe #4 Stackframe #5 Stackframe #6 int fib(int n) { if(n == 0) return 0; if(n == 1) return 1; return fib(n-1)+fib(n-2); } x = fib(3)? create n = 3 fib(2)? + fib(1)? create n = 2 fib(1)? + fib(0)? 1 + fib(0)? create n = 1 return 1 destroy create n = 0 return = 1 return 1 destroy 1 + fib(1)? destroy create x = = 2 return 2 destroy n = 1 return 1 destroy 13 / 31
25 Rekursion: Fibonacci - Stack Heap Stack Method Area Stackframe main Stackframe #2 Stackframe #3 Stackframe #4 Stackframe #5 Stackframe #6 int fib(int n) { if(n == 0) return 0; if(n == 1) return 1; return fib(n-1)+fib(n-2); } x = fib(3)? create n = 3 fib(2)? + fib(1)? create n = 2 fib(1)? + fib(0)? 1 + fib(0)? create n = 1 return 1 destroy create n = 0 return = 1 return 1 destroy 1 + fib(1)? destroy create x = = 2 return 2 destroy n = 1 return 1 destroy 13 / 31
26 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte Rekursion Verschachtelte Rekursion Rekursion und Iteration Tail Recursion Dynamic Programming Exkurs: Versionsverwaltung 14 / 31
27 Verschränkte Rekursion Verschränkte Rekursion heißt auch indirekte Rekursion. Der rekursive Aufruf steht nicht direkt im Funktionskörper, sondern erst innerhalb einer zweiten Funktion. Java public static boolean gerade(int n) { if (n == 0) return true; else return ungerade(n-1); } public static boolean ungerade(int n) { if (n == 0) return false; else return gerade(n-1); } 15 / 31
28 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte Rekursion Verschachtelte Rekursion Rekursion und Iteration Tail Recursion Dynamic Programming Exkurs: Versionsverwaltung 16 / 31
29 Verschachtelte Rekursion Bei der verschachtelten Rekursion, steht im Funktionskörper ein Rekursiver Aufruf der Funktion, der als Argument wieder einen Rekursiven Funktionsaufruf beinhaltet. Java public static boolean mccarthy(int n) { if (n > 100) return n-10; else return mccarthy(mccarthy(n+11)); } mccarthy(0) = 91 mccarthy(1) = mccarthy(101) = 91 mccarthy(102) = 92 mccarthy(103) = / 31
30 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte Rekursion Verschachtelte Rekursion Rekursion und Iteration Tail Recursion Dynamic Programming Exkurs: Versionsverwaltung 18 / 31
31 Rekursion: Leitfaden Welcher Rekursionstyp sinnvoll ist, hängt von der Art des Problems ab. Generell kann man aber sagen: Lineare Rekursion ist meistens die beste Wahl Verzweigte Rekursion braucht ein paar Tricks, wenn die Teilprobleme sich überschneiden Verschränkte Rekursion kann unübersichtlich werden, muss aber nicht Verschachtelte Rekursion sollte der Übersicht wegen vermieden werden 19 / 31
32 Iteration: Definition Iteration ist das Gegenkonzept zur Rekursion. Iterative Funktionen und Programme arbeiten wie wir es bereits kennengelernt haben mit Schleifen statt rekursiven Aufrufen. 20 / 31
33 Rekursion vs Iteration Weitere Eigenschaften von Rekursion: funktionale Sprachen kennen nur Rekursion alle Probleme können sowohl iterativ als auch rekursiv gelöst werden oft ist rekursive Formulierung natürlicher/kompakter Entscheidung je nach Problem und Effizienz der Lösung public static int fibi(int n) { if(n < 2) return n; int nm2 = 0; int nm1 = 1; for(int i = 2; i <= n; i++) { int tmp = nm1 + nm2; nm2 = nm1; nm1 = tmp; } return nm1; } public static int fibr(int n) { if (n == 0) return 0; if (n == 1) return 1; return fibr(n-1)+fibr(n-2); } 21 / 31
34 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte Rekursion Verschachtelte Rekursion Rekursion und Iteration Tail Recursion Dynamic Programming Exkurs: Versionsverwaltung 22 / 31
35 Tail Recursion Rekursion ist langsamer als Iteration... außer in funktionalen Programmiersprachen. Was ist der Trick? Rekursive Funktion public float rootdist() { if(plink == null) { return 0; } return plink.getdist() + plink.getnode().rootdist(); } 23 / 31
36 Tail Recursion Rekursion ist langsamer als Iteration... außer in funktionalen Programmiersprachen. Was ist der Trick? Rekursive Funktion public float rootdist() { if(plink == null) { return 0; } return plink.getdist() + plink.getnode().rootdist(); } Funktion mit Tail Recursion public float rootdist(float sum) { if(plink == null) { return sum; } return plink.getnode().rootdist(plink.getdist() + sum); } 23 / 31
37 Tail Recursion: Definition Definition Eine Funktion oder Methode heißt tail recursive wenn der rekursive Aufruf das allerletzte ist, was sie zu tun hat. Die Funktion ist mit dem ersten Durchgang fertig, wenn der zweite beginnt. i.d.r. erreicht man Tail Recursion mit zusätzlichen Argumenten public float rootdist(float sum) { if(plink == null) { return sum; } return plink.getnode().rootdist(plink.getdist() + sum); } 24 / 31
38 Tail Recursion: Vorteile Ein kluger Compiler kann Tail Recursion automatisch in Iteration übersetzen. knappe lesbare Formulierung (rekursiv) + Schnelligkeit (iterativ) public float rootdist(float sum) { if(plink == null) { return sum; } PhyloNode n = plink.getnode(); float dst = plink.getdist(); return n.rootdist(dst + sum); } public float rootdist() { float sum = 0; PhyloNode n = this; while(n.plink!= null) { sum += n.plink.getdist(); n = n.plink.getnode(); } return sum; } 25 / 31
39 Tail Recursion: Vorteile Ein kluger Compiler kann Tail Recursion automatisch in Iteration übersetzen. knappe lesbare Formulierung (rekursiv) + Schnelligkeit (iterativ) public float rootdist(float sum) { if(plink == null) { return sum; } PhyloNode n = plink.getnode(); float dst = plink.getdist(); return n.rootdist(dst + sum); } public float rootdist() { float sum = 0; PhyloNode n = this; while(n.plink!= null) { sum += n.plink.getdist(); n = n.plink.getnode(); } return sum; } Übrigens: Java beherrscht diese Optimierung leider nicht. : / 25 / 31
40 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte Rekursion Verschachtelte Rekursion Rekursion und Iteration Tail Recursion Dynamic Programming Exkurs: Versionsverwaltung 26 / 31
41 Tricks für verzweigte Rekursion: Dynamic Programming Problem der verzweigten Rekursion: Teilergebnisse werden mehrfach berechnet wir brauchen Rekursion mit Hirn Rekursion mit Hirn public int fib(int n, int[] brain) { // result already known? if(brain[n] >= 0) { return brain[n]; } } // need to calculate result brain[n] = fib(n-2, brain) + fib(n-1, brain); return brain[n]; 27 / 31
42 Dynamic Programming: Schema Dynamic Programming = Rekursion + Merken der Zwischenergebnisse i.d.r. realisiert durch Mitführen eines Arrays als zusätzlicher Parameter Vorteil: (fast) so schnell wie Iteration rekursive Formulierung kann beibehalten werden 28 / 31
43 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte Rekursion Verschachtelte Rekursion Rekursion und Iteration Tail Recursion Dynamic Programming Exkurs: Versionsverwaltung 29 / 31
44 Exkurs: Versionsverwaltung Definition Versionsverwaltungstools erlauben es dem Benutzer genau zu speichern wann an einer Textdatei welche Änderungen von wem vorgenommen wurden. Damit bieten sie auch Möglichkeiten Änderungen von mehreren Benutzern an der gleichen Datei zu handhaben. Git De-facto-Standard in der Softwareentwicklung dezentrales Konzept lokale Historie + Historie auf dem Server an der THM: / 31
45 Thank you for your attention! Bilder: xkcd.com, CC / 31
Brückenkurs Programmieren
Brückenkurs Programmieren Funktionen, Dokumentation, Rekursion Christopher Schölzel Technische Hochschule Mittelhessen 02.10.2013 Christopher Schölzel (THM) Brückenkurs Programmieren 02.10.2013 1 / 31
MehrVorkurs Informatik WiSe 17/18
Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 10.10.2017 Technische Universität Braunschweig, IPS Überblick Einleitung Türme von Hanoi Rekursion Beispiele 10.10.2017 Dr. Werner Struckmann
MehrVorkurs Informatik WiSe 16/17
Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 11.10.2016 Technische Universität Braunschweig, IPS Überblick Einleitung Beispiele 11.10.2016 Dr. Werner Struckmann / Stephan Mielke,
MehrTechnische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015
Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015 Ziele der Übung Aufgabe 1 Aufbau und Aufruf von Funktionen in Assembler Codeanalyse
MehrInformatik I: Einführung in die Programmierung
Informatik I: Einführung in die Programmierung 7. Albert-Ludwigs-Universität Freiburg Bernhard Nebel 31. Oktober 2014 1 31. Oktober 2014 B. Nebel Info I 3 / 20 Um zu, muss man zuerst einmal. Abb. in Public
MehrKlassenvariablen, Klassenmethoden
Einstieg in die Informatik mit Java, Vorlesung vom 11.12.07 Übersicht 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion Klassenmethoden
MehrTo know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1
To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1 Rekursion: Beispiele Bier trinken 8-Damen-Problem ipod Shuffle für alle Mitarbeiter Karten
MehrRekursion. L. Piepmeyer: Funktionale Programmierung - Rekursion
Rekursion 1 Iterative und rekursive Methoden Summe von 1 bis n berechnen: iterativ rekursiv public int sum(int n){ int result = 0; for(int i=1; i
MehrEINI 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
MehrErste Java-Programme (Scopes und Rekursion)
Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/
MehrSpeicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
MehrEINFÜHRUNG IN DIE PROGRAMMIERUNG
EINFÜHRUNG IN DIE PROGRAMMIERUNG GRUNDLAGEN Tobias Witt!! 24.03.2014 ORGANISATORISCHES 09:00-10:30! Täglich Übungen zur Vertiefung! Laptop hier nicht erforderlich! Linux, OS X! Freitag: http://hhu-fscs.de/linux-install-party/
MehrLösungsvorschlag Serie 2 Rekursion
(/) Lösungsvorschlag Serie Rekursion. Algorithmen-Paradigmen Es gibt verschiedene Algorithmen-Paradigmen, also grundsätzliche Arten, wie man einen Algorithmus formulieren kann. Im funktionalen Paradigma
MehrRekursive Funktionen
Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?
Mehr9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion
Experiment: Die Türme von Hanoi. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration Links Mitte Rechts Mathematische Rekursion Viele mathematische Funktionen
MehrEinstieg in die Informatik mit Java
1 / 18 Einstieg in die Informatik mit Java Klassenvariablen, Klassenmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 18 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden
MehrII.3.1 Rekursive Algorithmen - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.3.1 Rekursive Algorithmen -
MehrDynamische Programmierung. Problemlösungsstrategie der Informatik
als Problemlösungsstrategie der Informatik und ihre Anwedung in der Diskreten Mathematik und Graphentheorie Fabian Cordt Enisa Metovic Wissenschaftliche Arbeiten und Präsentationen, WS 2010/2011 Gliederung
Mehr6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
MehrKapitel 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
MehrDatenstruktur 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.
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrEinführung in das Programmieren Probeklausur Lösungen
Einführung in das Programmieren Probeklausur Lösungen Frederik Kanning 01.07.2013 Aufgabe 1 b/c) void definiert Methode ohne Rückgabewert return beendet aktuellen Methodenaufruf wenn Rückgabetyp nicht
MehrMethoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom
Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon
MehrAlgorithmen und Datenstrukturen Tafelübung 4. Jens Wetzl 15. November 2011
Algorithmen und Datenstrukturen Tafelübung 4 Jens Wetzl 15. November 2011 Folien Keine Garantie für Vollständigkeit und/oder Richtigkeit Keine offizielle Informationsquelle LS2-Webseite Abrufbar unter:
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrEinfache Arrays. 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/ Arrays: Wiederholung Ein
MehrProgrammieren 1 C Überblick
Programmieren 1 C Überblick 1. Einleitung 2. Graphische Darstellung von Algorithmen 3. Syntax und Semantik 4. Einstieg in C: Einfache Sprachkonstrukte und allgemeiner Programmaufbau 5. Skalare Standarddatentypen
MehrEINFÜHRUNG IN DIE PROGRAMMIERUNG
EINFÜHRUNG IN DIE PROGRAMMIERUNG GRUNDLAGEN Tobias Witt 24.03.2014 ORGANISATORISCHES tobias.witt@hhu.de 10:30-12:00 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Aber später in den Übungen!
MehrRekursive Funktionen
Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?
MehrSoftware 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
MehrTag 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
MehrSchnittstellen, Stack und Queue
Schnittstellen, Stack und Queue Schnittstelle Stack Realisierungen des Stacks Anwendungen von Stacks Schnittstelle Queue Realisierungen der Queue Anwendungen von Queues Hinweise zum Üben Anmerkung: In
MehrProf. 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
MehrProgrammiertechnik 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
Mehr3AA. Prozeduren und Rekursion Prof. Dr. Wolfgang P. Kowalk Universität Oldenburg WS 2005/2006
3AA Prozeduren und Rekursion 29.11.05 Prof. Dr. Wolfgang P. Kowalk Universität Oldenburg WS 2005/2006 3AA Prozeduren Berechnete Sprungadresse Ausführung bestimmter Anweisungen durch Schleifen Stattdessen:
MehrInhalt Kapitel 2: Rekursion
Inhalt Kapitel 2: Rekursion 1 Beispiele und Definition 2 Partialität und Terminierung 3 Formen der Rekursion Endständige Rekursion 4 Einbettung 29 Beispiele und Definition Rekursion 30 Man kann eine Funktion
MehrWelche Informatik-Kenntnisse bringen Sie mit?
Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt
MehrStack. Seniorenseminar Michael Pohlig
Stack Seniorenseminar 21.06.2013 Michael Pohlig (pohlig@kit.edu) Übersicht 1. Axiomatik eins Kellers und seine Software- Realisierung 2. Bedeutung der Rekursion in der Mathematik 3. Rekursive Programmierung.
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
MehrAlgorithmen 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
Mehr12. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Lernziele. Mathematische Rekursion. Rekursion in Java: Genauso! n! =
Lernziele Sie verstehen, wie eine Lösung eines rekursives Problems in Java umgesetzt werden kann. Sie wissen, wie Methoden in einem Aufrufstapel abgearbeitet werden. 12. Rekursion Mathematische Rekursion,
MehrAlgorithmen 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
MehrBeispiel: Fibonacci-Zahlen
Beispiel: Fibonacci-Zahlen Fibonacci Zahlen in der Natur Unendliche Reihe: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,... Fibonacci-Kaninchen: Pinienzapfen Blumenkohl L. P. Fibonacci (1170-1250) G. Zachmann Informatik
MehrÜBUNGS-BLOCK 7 LÖSUNGEN
ÜBUNGS-BLOCK 7 LÖSUNGEN Aufgabe 1: Gegeben ist folgender Code: Auto[] array = new Auto[3]; // Alle Autos im Array tunen: for (int i = 1; i
MehrDynamische Programmierung
Dynamische Programmierung Hannes Schwarz - WS-06/07 Hannes.Schwarz@uni-konstanz.de Getting Ready for the ACM Programming Contest Übersicht Übersicht Was ist dynamische Programmierung? Entwicklung eines
MehrC++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16
C++ Teil 5 Sven Groß IGPM, RWTH Aachen 12. Nov 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 12. Nov 2014 1 / 16 Themen der letzten Vorlesung Eingabestrom, Verhalten von cin Namensräume Live Programming
MehrTECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2006/2007 Praktikum Grundlagen der Programmierung Lösungsvorschläge zu Blatt 3 F. Forster, M.
MehrC++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16
C++ Teil 4 Sven Groß IGPM, RWTH Aachen 30. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 4 30. Apr 2015 1 / 16 Themen der letzten Vorlesung Funktionen: Definition und Aufruf Wert- und Referenzparameter,
MehrBeispiel: Fibonacci-Zahlen
Beispiel: Fibonacci-Zahlen Unendliche Reihe: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,... Fibonacci-Kaninchen: L. P. Fibonacci (1170-1250) G. Zachmann Informatik 1 - WS 05/06 Rekursion 23 Fibonacci Zahlen in der
Mehrpublic class Test extends MiniJava { public static void main (String [] args) { write(args[0]+args[1]); } } // end of class Test
Manche Funktionen, deren Ergebnistyp void ist, geben gar keine Werte zurück im Beispiel: write() und main(). Diese Funktionen heißen Prozeduren. Das Hauptprogramm hat immer als Parameter ein Feld args
MehrProgrammieren lernen mit Groovy Rekursion Rekursion und Iteration
Programmieren lernen mit Groovy Rekursion Seite 1 Rekursion Rekursion Ursprung lat. recurrere ~ zurücklaufen rekursive Definition Definition mit Bezug auf sich selbst Beispiel Fakultätsfunktion n! 0! =
MehrKapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte
Elementare Schritte Ein elementarer Berechnungsschritt eines Algorithmus ändert im Allgemeinen den Wert von Variablen Zuweisungsoperation von fundamentaler Bedeutung Zuweisungsoperator In Pascal := In
MehrDatenstrukturen und Algorithmen
Datenstrukturen und Algorithmen VO 708.031 robert.legenstein@igi.tugraz.at 1 Kapitel 2 Algorithmische robert.legenstein@igi.tugraz.at 2 2. Algorithmische 1) Iterative Algorithmen 2) Rekursive Algorithmen
MehrProgrammieren in Java
Einführung in die (imperative) Programmierung: Methoden 2 Wiederholung: if-else Anweisung int number =?; if ( BEDINGUNG ) { if (number > 0) { SATZ; BLOCK System.out.println("Größer 0"); else { SATZ; BLOCK
MehrEinstieg in die Informatik mit Java
1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf
MehrGrundlagen der Programmierung
Grundlagen der Programmierung Algorithmen und Datenstrukturen Die Inhalte der Vorlesung wurden primär auf Basis der angegebenen Literatur erstellt. Darüber hinaus sind ausgewählte Teile in Anlehnung an
Mehr12. Rekursion Grundlagen der Programmierung 1 (Java)
12. Rekursion Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 24. Januar 2006 Einordnung im Kontext der Vorlesung
MehrBrückenkurs Programmieren
Brückenkurs Programmieren Tag 4: Rekursion und Objektorientierung Christopher Schölzel Technische Hochschule Mittelhessen 29. März 2018 Inhalt Rekursion Objektorientierung API-Klassen: Collections Ausblick:
MehrBeispiel: Vom Problem zum Code
Beispiel: Vom Problem zum Code High-Level Pseudo-Code: Eingabe: Anzahl Scheiben: n (jede mit aufgedruckter Nummer) Quell-Stange, Ziel-Stange, Zwischenspeicher-Stange Vorbedingungen: Auf Quell-Stange befinden
MehrÜbergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1
Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
MehrVorlesung Programmieren
Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von
MehrVorlesung Programmieren
Vorlesung Programmieren 11 Rekursion Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION
MehrHallo Welt für Fortgeschrittene
Hallo Welt für Fortgeschrittene Dynamische Programmierung Thomas Karmann 4. Juni 2010 1 / 36 Übersicht Einführung Definition Anwendung Funktionsweise Grundlagen Memoisation Top-Down Bottom-Up Grenzen Anwendungsbeispiele
MehrTag 8 Repetitorium Informatik (Java)
Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium
MehrInformatik für Schüler, Foliensatz 18 Rekursion
Prof. G. Kemnitz Institut für Informatik, Technische Universität Clausthal 26. März 2009 1/10 Informatik für Schüler, Foliensatz 18 Rekursion Prof. G. Kemnitz Institut für Informatik, Technische Universität
MehrÜbungspaket 22 Rekursive Funktionsaufrufe
Übungspaket 22 Rekursive Funktionsaufrufe Übungsziele: Skript: 1. Technische Voraussetzungen für rekursive Funktionsaufrufe 2. Umsetzung mathematisch definierter Rekursionen in entsprechende C-Programme
MehrEinführung in die Informatik I
Einführung in die Informatik I Fortgeschrittene Rekursion Prof. Dr. Nikolaus Wulff Problematische Rekursion Mittels Rekursion lassen sich Spezifikationen recht elegant und einfach implementieren. Leider
MehrMethoden und Funktionen in Scala
Methoden und Funktionen in Scala Kapitel 11 und 12 des Buches 1 Jede Methode hat einen Typ Für die folgende Methode def square(v: Int) = v*v erhalten wir von der Scala-Shell die Rückmeldung square: (Int)Int
MehrFunktionale Programmierung ALP I. Die Natur rekursiver Funktionen SS Prof. Dr. Margarita Esponda. Prof. Dr.
ALP I Die Natur rekursiver Funktionen SS 2011 Die Natur rekursiver Funktionen Rekursive Funktionen haben oft folgende allgemeine Form: f :: a -> a f 0 = c f (n+1) = h (f n ) Diese Art der Definitionen
MehrAdvanced Programming in C
Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer
MehrOrdnung im Materiallager: Datenstrukturen II. Suchen und Sortieren im Array Verkettete Listen Rekursion
Ordnung im Materiallager: Datenstrukturen II Suchen und Sortieren im Array Verkettete Listen Rekursion Indizierter Datenbehälter Modell: Parkhaus, nummerierte Plätze interface FuhrparkIndex { // indiziert
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)
MehrRekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung
Rekursion Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-12-13/infoeinf WS12/13 Aufgabe 1: Potenzfunktion Schreiben Sie eine Methode, die
MehrRekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die
MehrProf. Dr. Margarita Esponda
Die O-Notation Analyse von Algorithmen Die O-Notation Prof. Dr. Margarita Esponda Freie Universität Berlin ALP II: Margarita Esponda, 5. Vorlesung, 26.4.2012 1 Die O-Notation Analyse von Algorithmen Korrektheit
MehrMethoden und Funktionen
Programmieren mit Java Modul 4 Methoden und Funktionen Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Methoden 3 2.1 Methoden ohne Rückgabewert (Prozeduren)................ 3 2.2 Methoden mit Rückgabewert
MehrKapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration
Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Inhalt Rekursion: Technik Prof. Dr. Günter Rudolph Fakultät
MehrInformatik I (D-MAVT)
Informatik I (D-MAVT) Übungsstunde 8, 22.4.2009 simonmayer@student.ethz.ch ETH Zürich Aufgabe 1: Pointer & Structs Schauen wir s uns an! Aufgabe 2: Grossteils gut gemacht! Dynamische Arrays! Sortieren:
MehrMartin Unold INFORMATIK. Geoinformatik und Vermessung
Zusammenfassung Was ist eine Programmiersprache? Eine Sprache, die Formal eindeutig in Maschinenbefehle übersetzbar ist Für Menschen einfacher verständlich ist als Bytecode Zur Formulierung von Datenstrukturen
MehrProf. Dr. Margarita Esponda
Analyse von Algorithmen Die O-Notation WS 2012/2013 Prof. Dr. Margarita Esponda Freie Universität Berlin 1 Korrekte und effiziente Lösung von Problemen Problem Wesentlicher Teil der Lösung eines Problems.
MehrMusterlösung Stand: 5. Februar 2009
Fakultät IV Elektrotechnik/Informatik Probeklausur Einführung in die Informatik I Hinweis: Diese Probeklausur ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der Teilleistung TL 2 (Programmiertest)
MehrUE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 3
UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1 Übung 3 Algorithmen mit Gedächtnis Besonderheit Beispiele Typische Algorithmen Realisierungsvarianten Institut für Pervasive Computing Johannes
MehrTHE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic
THE GO PROGRAMMING LANGUAGE Part 1: Michael Karnutsch & Marko Sulejic Gliederung Geschichte / Motivation Compiler Formatierung, Semikolons Variablen, eigene Typen Kontrollstrukturen Funktionen, Methoden
MehrAusnahmebehandlung in Java
Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A { void foo() throws Help { if (helpneeded()) throw new Help();... try {... catch (Help e) {... catch (Exception
MehrRepetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
MehrFHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt
Inhalt 1. Einführung 1. Beispiel: Fakultät 2. Beispiel: Zahlenfolge 3. Beispiel: Formale Sprache 4. Unterschied Iteration/Rekursion 2. Rekursive Methoden 1. Beispiel: Fakultät 2. Beispiel: "Türme
Mehr3. Basiskonzepte von Java
3. Basiskonzepte von Java Die in Abschnitt 3 vorgestellten Konzepte von Java sind allgemein gültig und finden sich so oder so ähnlich in eigentlich jeder gängigen Programmiersprache. Abschnitt 3.2.3, Klassen
Mehr15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen
453 15. Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen Mathematische Rekursion 454 Viele mathematische Funktionen sind sehr natürlich rekursiv
MehrVariablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel
4213 Variablen 17.834 float Flugzeug 36812736294 I write code Hund long String Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 3 + 4 1 Variablen sind wie Becher. Sie speichern etwas. // Variablen
MehrRekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die
MehrEinführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015
Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)
MehrInformatik II Übung 4 Gruppe 7
Informatik II Übung 4 Gruppe 7 Leyna Sadamori leyna.sadamori@inf.ethz.ch Informatik II Übung 4 Leyna Sadamori 20. März 2014 1 Administratives Text Encoding: UTF-8 Informatik II Übung 4 Leyna Sadamori 20.
MehrInstitut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. Januar 2018 Hinweise: Klausurtermine: Programmieren I Übungsklausur Programmieren I: 17. Februar
MehrEinstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
MehrGrundlagen der Programmierung WS 15/16 (Vorlesung von Prof. Bothe)
Humboldt-Universität zu Berlin Institut für Informatik Grundlagen der Programmierung WS 15/16 (Vorlesung von Prof. Bothe) Übungsblatt 4: Felder und Rekursion Abgabe: bis 9:00 Uhr am 14.12.2015 über Goya
MehrMathematische Rekursion
Rekursion Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die Funktion erscheint in ihrer eigenen Definition. Mathematische Rekursion o Viele mathematische
MehrEin kleiner Blick auf die generische Programmierung
TgZero Technik.Blosbasis.net June 3, 2013 1 Inhaltsverzeichnis 1 Vorwort 3 2 Ein kleines Beispiel 3 3 Templates 3 4 Verschiedene Datentypen 4 5 Variadic Templates 5 6 Unterschied zwischen den Programmiersprachen
MehrInformatik II Übung 5
Informatik II Übung 5 Florian Scheidegger florsche@student.ethz.ch Folien mit freundlicher Genehmigung adaptiert von Gábor Sörös und Simon Mayer gabor.soros@inf.ethz.ch, simon.mayer@inf.ethz.ch 27.03.2013
Mehr