3.6.4 Rekursive Funktionen
|
|
- Katarina Schulz
- vor 7 Jahren
- Abrufe
Transkript
1 Klassifizierung von Funktionen mit Hilfe der Abstützrelation (Wenn eine Funktionsdefinition für f eine Funktion g aufruft, dann besteht zwischen beiden Definitionen die Relation f benutzt g ) Klasse 0 Klasse 1 alle vordefinierten Funktionen (Elementaroperationen) alle Funktionen, die nur Funktionen der Klasse 0 benutzen Klasse k+1 g { f 1, f 2,, f n }, wobei das zur höchsten Klasse gehörende f i der Klasse k zugeordnet ist Eine Funktion ist einfacher als eine andere, wenn sie einer Klasse mit kleinerer Nummer angehört Dieses bisherige Berechnungsmodell erfasst offenbar nicht alle Funktionen 123
2 Rekursive Funktionen: Rekursivität ist keine Eigenschaft einer Funktion (im Sinn einer Beziehung zwischen Ein und Ausgabedaten), sondern eine Eigenschaft einer konkreten Funktionsdefinition Eine Funktionsdefinition heisst rekursiv, wenn entweder f f gilt oder es Funktionsdefinitionen für g 1,..., g n gibt mit f g 1 g n f Eine wichtige Frage bei rekursiven Funktionen ist ihre Terminierung 124
3 Beispiel: Multiplikation (von ganzen Zahlen) durch sukzessive Addition x y = y + y y = y + (x 1) y x-mal (define (mult x y) (if (= x 0) 0 (+ y (mult (- x 1) y)))) Auswertung für (mult 2 3): (mult 2 3) (if (= 2 0) 0 (+ 3 (mult (- 2 1) 3))) (+ 3 (mult 1 3)) (+ 3 (if (= 1 0) 0 (+ 3 (mult (- 1 1) 3)))) (+ 3 (+ 3 (mult 0 3))) (+ 3 (+ 3 (if (= 0 0) 0 (+ 3 (mult (- 0 1) 3)))) (+ 3 (+ 3 0)) (+ 3 3) 6 125
4 Wie funktioniert Rekursion? Grundlage ist der Prozedurmechanismus: Eine angefangene Berechnung wird an der Stelle des Prozeduraufrufs unterbrochen. Die Stelle wird (zum Beispiel in Form einer Adresse) auf einen Stack gelegt. Auf Maschinenebene findet ein Sprung zum Code der aufgerufenen Prozedur statt. Nach Beendigung der aufgerufenen Prozedur findet ein Rücksprung zur Stelle der Unterbrechung statt. Die Rücksprungadresse wird dabei vom Stack entfernt. Auf dem Stack werden bei einem Prozeduraufruf verschiedene Daten gespeichert, die zusammen als Aktivierungsblock bezeichnet werden. Er existiert für jeden angefangenen, nicht beendeten Prozeduraufruf und enthält u. a. Rücksprungadresse, Parameterwerte, lokale Variable, und Returnwert 126
5 Die Entwicklung des Stacks wird im Stackprofil (SP) einer Berechnung dargestellt: Die Prozedur A ruft zweimal E, dann sich mit einer Rekursionstiefe von maximal 5, und schließlich B und C auf. Bis zu fünf Aktivierungsblöcke von A liegen gleichzeitig auf dem Stack. 127
6 Aufruf von (mult -2 3) terminiert nicht, da die Bedingung(= x 0) nie erfüllt wird (mult -2 3) (if (= -2 0) 0 (+ 3 (mult (- -2 1) 3))) (+ 3 (mult -3 3)) (+ 3 (if (= -3 0) 0 (+ 3 (mult (- -3 1) 3)))) (+ 3 (+ 3 (mult -4 3))) (+ 3 (+ 3 (if (= -4 0) 0 (+ 3 (mult (- -4 1) 3))))) (+ 3 (+ 3 (+ 3 (mult -5 3)))) 128
7 Berechnung von n! = n (n 1) (n 2) Rekursive Formulierung: 0! = 1 n! = n (n 1)! (define (fak n) (if (= n 0) 1 ( n (fak (- n 1))))) terminiert nur für n 0! Diese Art von Nicht-Terminierung lässt sich problemlos durch Überprüfung der übergebenen Parameter vermeiden 129
8 Es gibt aber Funktionen, bei denen eine Terminierung nicht möglich ist Beispiel: Die Collatz Folge (auch 3n+1 Problem, Hasse Algorithmus, Syracuse Folge genannt). Grundlage ist folgende Funktion f : N N: Damit wird die Collatz Folge einer ganzen Zahl n definiert: Mit anderen Worten: Man erhält die Collatz Folge von n, indem man ausgehend von n, solange immer wieder die Funktion f anwendet, bis die Eins erreicht ist. Bsp. N=11:
9 (define (f n) (if (even? n) (/ n 2) (+ (* 3 n) 1))) (define (collatz n) (if (= n 1) '(1) (cons n (collatz (f n))))) > (collatz 11) (list ) Die Funktion terminiert für alle Zahlen n, von denen aus man durch wiederholtes Anwenden von f irgendwann die Eins erreicht. Das Erreichen der Eins kann dauern: > (collatz 27) ( einiges ausgelassen ) > (length (collatz 27))
10 Vermutung: Die Funktion collatz terminiert für alle n > 0 Das ist bis heute weder bewiesen noch widerlegt worden. Bis ca. n = ist die Vermutung bestätigt (Es lohnt sich also kaum, ein Gegenbeispiel zu suchen!) Paul Erdös bot 500 Pfund für eine Lösung, sagte aber über das Collatz-Problem: Mathematics is not yet ready for such problems Bruce Schechter: Mein Geist ist offen. Die mathematischen Reisen des Paul Erdős. Basel, Birkhäuser
11 Terminierende Rekursion: Kombination aus aufgerufenen Funktionen und ihren aktuellen Parameterwerten wird in jedem Schritt einfacher : Die Parameter werden schrittweise so verändert, dass sie immer näher an einen Wert kommen, der die Abbruchbedingung erfüllt Wesentlich für Rekursion: Abstraktion durch Verwendung von Namen für Funktionen: Sonst könnten rekursive Funktionen nicht beschrieben werden, da der Name erst das Bezugnehmen auf eine Funktion in ihrer eigenen Definition erlaubt Konditionale zur Sicherstellung der Terminierung: Sonst könnten keine Abbruchbedingungen für die Rekursion formuliert werden 133
12 Charakterisierung von Rekursion: Direkte vs. indirekte Rekursion Lineare vs. nicht-lineare Rekursion Linear rekursiver Prozess vs. linear iterativer Prozess Endrekursion (tail recursion) 134
13 Direkte vs. Indirekte Rekursion: Stützt sich eine Funktion f auf sich selbst ab, d.h. ruft f sich in seinem Rumpf selbst auf, so spricht man von direkter Rekursion: f f Stützt f sich indirekt auf sich selbst ab, d.h. gibt es eine endliche Folge von Abstützschritten f g 1 g 2 K g k so spricht man von indirekter Rekursion f Beispiel: (define (f x) (+ (g x) 1)) (define (g x) (- (f x) 2)) beschreibt eine nicht-terminierende, indirekte Rekursion 135
14 Beispiel: (define (h1 n) (if (<= n 0) 0 (+ n (h2 (- n 1))))) (define (h2 n) (+ n (h1 (- n 1)))) berechnet mittels einer terminierenden, indirekten Rekursion (h1 3) (+ 3 (h2 2)) (+ 3 (+ 2 (h1 1))) (+ 3 (+ 2 (+ 1 (h2 0)))) (+ 3 (+ 2 (+ 1 (+ 0 (h1 1))))) (+ 3 (+ 2 (+ 1 (+ 0 0)))) (+ 3 (+ 2 (+ 1 0))) (+ 3 (+ 2 1)) (+ 3 3) 6 n i =0 i 136
15 Beispiel: Indirekte Rekursion Der Aufruf (even l) listet die Elemente von l mit geradem Index (Index beginnt mit 0), (odd l) gibt die Elemente mit ungeradem Index zurück (define (even l) (define (odd l) (if (empty? l) empty (cons (first l) (odd (rest l))))) > (define l (list )) > (even l) (list 0 2) > (odd l) (list 1 3) (cond [(empty? l) empty] [(empty? (rest l)) empty] [else (even (rest l))])) 137
16 Ein wichtiges Beispiel für indirekte Rekursion sind Parser. Die Syntax vieler Programmiersprachen ist rekursiv definiert Beispiel: In Scheme ist ein Ausdruck ein atomarer Ausdruck oder eine Liste. Eine Liste wiederum ist ein Klammerpaar, zwischen dem eine Anzahl von Ausdrücken stehen Der Parser für die Syntax von Scheme enthält typischerweise zwei Funktionen parseexpr und parselist, die sich wechselseitig aufrufen 138
17 Lineare Rekursion: Eine Funktion heisst linear rekursiv, wenn jede Auswertung des Rumpfes zu höchstens einem weiteren rekursiven Aufruf führt. Entscheidend ist der während der Programmausführung ablaufende Prozess, nicht die textuelle Definition der Funktion. Enthält der Rumpf einer Funktion nur einen rekursiven Aufruf, so kann man statisch, d.h. ohne Berücksichtigung der Programmausführungen, lineare Rekursion feststellen Beispiel: (define (modulo in modul) (cond [(>= in modul) (modulo (- in modul) modul)] [(< in 0) (modulo (+ in modul) modul)] [else in])) Modulo-Funktion für modul N und beliebige Eingaben in Z linear rekursive Funktion mit mehreren statischen Aufrufmöglichkeiten 139
18 Nicht-lineare Rekursion: Erfolgen bei der Auswertung des Rumpfes einer Funktion mehrere rekursive Aufrufe, so spricht man von nichtlinearer oder Baumrekursion Beispiel: Berechnung der Folge der Fibonacci-Zahlen, in der jede Zahl die Summe der beiden vorhergehenden Zahlen ist: Allgemeine Definition der Fibonacci-Zahlen: fib(0) = 0, fib(1) = 1, n 2: fib(n) = fib(n 1) + fib(n 2) (define (fib n) (cond [(= n 0) 0] [(= n 1) 1] [else (+ (fib (- n 1)) (fib (- n 2)))])) 140
19 Auswertung im Substitutionsmodell Berechnungsprozess: (fib 5) (+ (fib 4) (fib 3)) (+ (+ (fib 3) (fib 2))(+ (fib 2) (fib 1))) (+ (+ (+ (fib 2) (fib 1))(+ (fib 1) (fib 0))) (+ (+ (fib 1) (fib 0)) 1)) (+ (+ (+ (+ (fib 1) (fib 0)) 1)(+ 1 0)) (+ (+ 1 0) 1)) (+ (+ (+ (+ 1 0) 1) 1) (+ 1 1)) (+ (+ (+ 1 1) 1) 2) (+ (+ 2 1) 2) (+ 3 2) 5 141
20 Baumdarstellung des Berechnungsprozesses: 1 0 fib 5 fib 4 fib 3 fib 3 fib 2 fib 2 fib 1 fib 2 fib 1 fib 1 fib 0 fib 1 fib 0 1 fib 1 fib Die bei der Auswertung auftretenden Aufrufe von fib verzweigen dabei und bilden eine Baumstruktur. Das führt in der Regel dazu, dass die Anzahl der Aufrufe von fib sehr schnell anwächst 142
21 Diese Implementierung ist extrem langsam. Wenn t n die Rechenzeit für (fib n) bezeichnet, dann gilt: Die Rechenzeit wächst also exponentiell mit n. Das Verfahren ist deshalb so ineffizient, weil für die Berechnung von (fib n) jeder Wert von (fib k), k < n-1, mehrfach berechnet wird. Z.B. wird (fib 1) genau (fib n) mal aufgerufen. 143
22 Man kann den Aufrufbaum von (fib n) auch explizit mittels desselben Prinzips der Baumrekursion berechnen (define (fibtree n) (cond [(= n 0) (list 0)] [(= n 1) (list 1)] [else (list n (fibtree (- n 2)) (fibtree (- n 1)))])) > (fibtree 5) (list 5 (list 3 (list 1) (list 2 (list 0) (list 1))) (list 4 (list 2 (list 0) (list 1)) (list 3 (list 1) (list 2 (list 0) (list 1))))) 144
23 Es existiert effizientere Realisierung der Fibonacci-Zahlen. Die ultimative Lösung besteht in der Anwendung der analytischen Formel: die mithilfe von Methoden aus der diskreten Mathematik (z.b. erzeugende Funktionen) hergeleitet werden kann 145
24 Exkurs: Goldener Schnitt Die Zahl (1+ 5)/2 ist auch als Goldener Schnitt bekannt. Betrachten wir ein Rechteck mit Seitenlängen s und r s Schneiden wir von diesem Rechteck ein Quadrat ab, so verbleibt ein Rechteck mit Seitenlängen r und s r. Besimmt man nun die Werte für s und r so, dass die beiden Rechtecke genau dasselbe Seitenverhältnis haben, also so erhält man genau s r = 1+ p 5 2 ¼ 1:6181::: 146
25 Exkurs: Goldener Schnitt Streckenverhältnisse im Goldenen Schnitt werden in der Kunst und Architektur oft als ideale Proportion und als Inbegriff von Ästhetik und Harmonie angesehen. Darüber hinaus tritt das Verhältnis auch in der Natur in Erscheinung und zeichnet sich durch eine Reihe interessanter mathematischer Eigenschaften aus. Beim Parthenontempel in Athen bildet der Säuleneingang hierbei ein goldenes Rechteck, also ein Rechteck, dessen Seiten sich genau wie der goldene Schnitt verhalten. Auch verhält sich die Höhe bis zum Dach zur Höhe der Säulen wie der goldene Schnitt. 147
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
MehrFallstudie: Nim Spiel
Fallstudie: Nim Spiel Angeblich chinesischen Ursprungs (Jianshizi) Interessant für Spieltheorie: vollständig analysierbar Frühzeitig computerisiert 1939 Nimatron (Weltausstellung New York) 1951 Nimrod
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
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
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
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
MehrObjektorientierte Programmierung (ZQ1u2B)
Objektorientierte Programmierung (ZQ1u2B) Woche 4 Rekursion Christopher Scho lzel Technische Hochschule Mittelhessen 4. November 2015 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte
MehrFallstudie: Nim Spiel
Fallstudie: Nim Spiel Angeblich chinesischen Ursprungs (Jianshizi) Interessant für Spieltheorie: vollständig analysierbar Frühzeitig computerisiert 1939 Nimatron (Weltausstellung New York) 1951 Nimrod
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
MehrEinstieg in die Informatik mit Java
1 / 20 Einstieg in die Informatik mit Java Rekursion Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 20 1 Überblick 2 Rekursion 3 Rekursive Sortieralgorithmen 4 Backtracking
MehrFunktionen; Rekursion
restart; Der Operator - Funktionen; Rekursion Mit dem - -Operator definiert man eine Funktion (Abbildung. '-' hat (zunächst einen Namen (den Formalparameter als linken und einen Ausdruck als rechten Operanden.
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
MehrFibonacci-Zahlen. Geschichte. Definition. Quotienten
Mathematik/Informatik Die Fibonacci-Zahlen Gierhardt Fibonacci-Zahlen Geschichte Im Jahre 0 wurde in Pisa ein Buch über das indischarabische Dezimalsystem von dem italienischen Mathematiker Leonardo Fibonacci
MehrGroßübung zu Einführung in die Programmierung
Großübung zu Einführung in die Programmierung Daniel Bimschas, M.Sc. Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/bimschas Inhalt 1. Besprechung Übung 4 Iteration
MehrAlgorithmen & Programmierung. Rekursive Funktionen (1)
Algorithmen & Programmierung Rekursive Funktionen (1) Berechnung der Fakultät Fakultät Die Fakultät N! einer nichtnegativen ganzen Zahl N kann folgendermaßen definiert werden: d.h. zur Berechnung werden
Mehr13 Berechenbarkeit und Aufwandsabschätzung
13 Berechenbarkeit und Aufwandsabschätzung 13.1 Berechenbarkeit Frage: Gibt es für jede Funktion, die mathematisch spezifiziert werden kann, ein Programm, das diese Funktion berechnet? Antwort: Nein! [Turing
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
MehrInformatik I. 9. Nachweis von Programmeigenschaften. Jan-Georg Smaus. Albert-Ludwigs-Universität Freiburg. 2. Dezember 2010
Informatik I 9. Nachweis von Programmeigenschaften Jan-Georg Smaus Albert-Ludwigs-Universität Freiburg 2. Dezember 2010 Jan-Georg Smaus (Universität Freiburg) Informatik I 2. Dezember 2010 1 / 30 Informatik
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
Mehr2. Algorithmenbegriff
2. Algorithmenbegriff Keine Algorithmen: Anleitungen, Kochrezepte, Wegbeschreibungen,... Algorithmus: Berechnungsvorschrift, die angibt, wie durch Ausführung bestimmter Elementaroperationen aus Eingabegrößen
Mehr26 Hierarchisch strukturierte Daten
Algorithmik II Peter Wilke Sommersemester 2005 Teil III Funktionale Programmierung 26 Hierarchisch strukturierte Daten Peter Wilke Algorithmik II Sommersemester 2005 1 Peter Wilke Algorithmik II Sommersemester
MehrStand 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
MehrGrundlagen der Programmierung (Vorlesung 15)
Grundlagen der Programmierung (Vorlesung 15) Ralf Möller, FH-Wedel Vorige Vorlesung Blöcke, Funktionen Auswertestrategien Inhalt dieser Vorlesung Prozeduren Rekursion Lernziele Grundlagen der systematischen
Mehr... direkte Umsetzung in Scheme. Prozeduren und von ihnen erzeugte Prozesse Gültigkeitsbereiche und Rekursion
Prozeduren und von ihnen erzeugte Prozesse Gültigkeitsbereiche und Rekursion Stand: Wir kennen Elementare ( primitive ) Operationen Kombination dieser Operationen Abstraktion zusammengesetzter Operationen
MehrLösung Probeklausur Informatik I
Lösung Probeklausur Informatik I 1 Lösung Aufgabe 1 (5 Punkte) Algorithmen und Programme Was ist der Unterschied zwischen einem Algorithmus und einem Programm? Ein Algorithmus ist eine Vorschrift zur Durchführung
Mehr11. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Mathematische Rekursion. Rekursion in Java: Genauso! Unendliche Rekursion. n!
Mathematische Rekursion 11. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration, Lindenmayer Systeme Viele mathematische Funktionen sind sehr natürlich
Mehr12. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Lernziele. Mathematische Rekursion. Rekursion in Java: Genauso! n! =
Lernziele Sie verstehen, wie eine Lösung eines rekursives Problems in Java umgesetzt werden kann. Sie wissen, wie Methoden in einem Aufrufstapel abgearbeitet werden. 12. Rekursion Mathematische Rekursion,
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
Mehr( )= 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
MehrSoftware Entwicklung 1
Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Lernziele Rekursive Prozeduren zu charakterisieren. Terminierung von rekursiven Prozeduren mit Hilfe von geeigneten Abstiegsfunktionen
MehrVerwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C
Übersicht Funktionen Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion Sinn von Funktionen Wiederverwendung häufig verwendeter nicht banaler Programmteile Wiederverwendung
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
MehrKapitel 7. Rekursionsgleichungen. Allgemeines Iterationsmethode Klassen von Rekursionsgleichungen Erzeugende Funktionen
Kapitel 7 Rekursionsgleichungen p. /38 Kapitel 7 Rekursionsgleichungen Allgemeines Iterationsmethode Klassen von Rekursionsgleichungen Erzeugende Funktionen Kapitel 7 Rekursionsgleichungen p. 2/38 Allgemeines
MehrAlgorithmen & Programmierung. Rekursive Funktionen (2)
Algorithmen & Programmierung Rekursive Funktionen (2) Arten von Rekursion Direkte Rekursion Den Aufruf einer Funktion direkt aus ihrem Funktionskörper heraus bezeichnet man als direkte Rekursion (so haben
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
MehrKontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht
Kontrollanweisungen Kontrollfluss o bisher linear (von oben nach unten) o Für interessante Programme braucht man Verzweigungen und Sprünge Kontrollfluss o bisher linear (von oben nach unten) o Für interessante
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
MehrKomplexität von Algorithmen
Komplexität von Algorithmen Prof. Dr. Christian Böhm WS 07/08 in Zusammenarbeit mit Gefei Zhang http://www.dbs.informatik.uni-muenchen.de/lehre/nfinfosw Ressourcenbedarf - Größenordnungen Prozesse verbrauchen
Mehr8 Programmieren mit Akkumulatoren
8 Programmieren mit Akkumulatoren Bei den rekursiven Prozeduren der vergangenen Kapitel war der Wert eines rekursiven Aufrufs stets unabhängig vom Kontext: Die Fakultät von 4 wußte nicht, daß sie später
MehrFolgen und Funktionen in der Mathematik
Folgen und Funktionen in der Mathematik Anhand von einigen exemplarischen Beispielen soll die Implementierung von mathematischen Algorithmen in C/C++ gezeigt werden: Reelle Funktionen in C/C++ Diese wird
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
MehrÜberblick. Notwendigkeit der Rekursion (1)
Überblick 1. Die Prozedur als Kernbegriff der Programmierung 2. Prozeduren zur Bildung von Abstraktionsbarrieren: Lokale Deklarationen 3. Prozeduren versus Prozesse 4. Ressourcenbedarf Größenordnungen
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
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
MehrALP I. Funktionale Programmierung
ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013 Zusammengesetzte Datentypen Tupel List String Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung
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
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 2 (1.B)
Grundlagen der Programmierung 2 (1.B) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 20. April 2011 Aufrufhierarchie und Rekursive Definitionen f, g, f i seien Haskell-definierte
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?
MehrGrundlagen der Programmierung 2. Operationale Semantik
Grundlagen der Programmierung 2 Operationale Semantik Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 29. April 2009 Semantik von Programmiersprachen Semantik = Bedeutung
MehrEinführung in die Informatik I
Einführung in die Informatik I LOOP Programme, rekursive Funktionen und der Turm von Hanoi Prof. Dr. Nikolaus Wulff Berechenbarkeit Mitte des 20. Jahrhunderts beantworteten Pioniere, wie Alan M. Turing
MehrC.3 Funktionen und Prozeduren
C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens
MehrÜbung zu Algorithmen und Datenstrukturen (für ET/IT)
Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2015 Matthias Wieczorek Computer-Aided Medical Procedures Technische Universität München Administratives Zentralübung (Mittwoch, 09:45
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
MehrProgrammierung 1 - Repetitorium
WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage: http://info1.marcwagner.info Dienstag, den 08.04.03 Kapitel 4 Laufzeit 4.1 Vorbemerkungen Im folgenden betrachten
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
MehrÜbung zu Algorithmen und Datenstrukturen (für ET/IT)
Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2017 Rüdiger Göbl, Mai Bui Computer Aided Medical Procedures Technische Universität München Administratives Zentralübung (Mittwoch, 09:45
Mehr4 Effizienz und Komplexität 3.1 1
4 Effizienz und Komplexität 3.1 1 Effizienz (efficiency): auf den Ressourcen-Verbrauch bezogene Programmeigenschaft: hohe Effizienz bedeutet geringen Aufwand an Ressourcen. Typische Beispiele: Speichereffizienz
MehrRekursive Algorithmen
Rekursive Algorithmen In der Mathematik sind viele Funktionen rekursiv definiert. Der Begriff der Rekursion beinhaltet, dass zur Definition einer Funktion diese selbst wieder mit benutzt wird, allerdings
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.
MehrStackmaschine; Speicheradressierung
Stackmaschine; Speicheradressierung Erweiterung um globalen Speicher (Heap, Halde) pro Speicherplatz eine Zahl. Notation ist als Array SP [0..]. Zugriff mittels Adresse (Index): eine Zahl i.a.: Zahlen
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
MehrGrundlagen der Programmierung 2 (1.B)
Grundlagen der Programmierung 2 (1.B) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 27. April 2012 Beispiel: Aufrufhierarchie quadrat x = x*x quadratsumme x y = (quadrat
Mehr1 Erste Schritte in Scheme
1 Erste Schritte in Scheme Die Programmiersprache Scheme geboren 1975 Eltern: Gerald Jay Sussman and Guy Lewis Steele Jr. Ort: Massachusetts Institute of Technology aktuelle Beschreibung: R6RS (September
Mehr5. Algorithmen. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
5. Algorithmen K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 21. Okt. 2015 1. Berechne 2 n. Zu lösende Probleme 2. Berechne die Fakultät einer nat. Zahl: n! = 1 * 2 *... n 3. Entscheide,
MehrBrü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
MehrBeispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner:
Beispiele: Funktionsabstraktion (3) Funktionsdeklaration 3. Abstraktion über Funktionsbezeichner: Ausdruck: f (f x) Abstraktion: \ f x -> f (f x) Mit Bezeichnervereinbarung: twice = \ f x -> f (f x) erg
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrProjekt Systementwicklung
Projekt Systementwicklung Effiziente Codierung: Laufzeitoptimierung Prof. Dr. Nikolaus Wulff Effiziente Codierung Der Wunsch effizienten Code zu schreiben entstammt mehreren Quellen: Zielplattformen mit
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
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
Mehr6. Induktives Beweisen - Themenübersicht
6. Induktives Beweisen - Themenübersicht Ordnungsrelationen Partielle Ordnungen Quasiordnungen Totale Ordnungen Striktordnungen Ordnungen und Teilstrukturen Noethersche Induktion Anwendung: Terminierungsbeweise
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,
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
MehrRekursive Funktionen (1)
Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: n i n! = i=1 für n > 0 1 für
Mehr2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.
2.5 Listen Listen werden mithilfe von [] und :: konstruiert. Kurzschreibweise: [42; 0; 16] # let mt = [];; val mt : a list = [] # let l1 = 1::mt;; val l1 : int list = [1] # let l = [1;2;3];; val l : int
MehrRekursive Funktionen (1)
Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: nn ii nn! = ii=1 für nn > 0
Mehr5 Kontinuierliches Wachstum
5 Kontinuierliches Wachstum Kontinuierlich meßbare Größe Wir betrachten nun eine Größe a, die man kontinuierlich messen kann. Den Wert von a zum Zeitpunkt t schreiben wir nun als a(t). Wir können jedem
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 -
MehrCS1005 Objektorientierte Programmierung
CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Funktionen / statische Methoden - Definition - Verwendung - Ausführung Seite 1 Th Letschert Funktionen: Definition und Verwendung
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.
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
MehrKlausur Informatik 1 SS 08. Aufgabe 1 2 3 4 Max. Punkte 30 40 40 10 Punkte. Gesamtpunkte:
Klausur Informatik 1 SS 08 Aufgabe 1 2 3 4 Max. Punkte 30 40 40 10 Punkte Gesamtpunkte: Note: Bearbeitungszeit 120 Minuten Keine Hilfsmittel Tragen Sie als erstes Ihren vollständigen Namen und Ihre Matrikelnummer
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrBemerkung: der goldene Schnitt ϕ ist die positive Lösung der Gleichung: x 2 = 1 + x
Rekursive Definition der Fibonacci-Zahlen Erste Werte f 0 = 0, f 1 = 1, f n = f n 1 + f n 2 (n 2) n 0 1 2 3 4 5 6 7 8 9 10... 25... f n 0 1 1 2 3 5 8 13 21 34 55... 75025... Exakte Formel (de Moivre, 1718)
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
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
MehrTeil 7: Rekursion; Imperative Programme
1 Teil 7: Rekursion; Imperative Programme Terminierend rekursive Funktionen Im Tutorial: Kap. 3.5 / 9.2 Definition mit recdef, Nachweis der Terminierung Beweise über rekursive Funktionen Imperative Programme
Mehr8 Anwendung: Suchen. Folge a ganzer Zahlen; Element x. Wo kommt x in a vor?
8 Anwendung: Suchen Gegeben: Gesucht: Folge a ganzer Zahlen; Element x Wo kommt x in a vor? Naives Vorgehen: Vergleiche x der Reihe nach mit a[0], a[1], usw. Finden wir i mit a[i] == x, geben wir i aus.
MehrKapitel 2. Funktionale Programmierung. Programmieren 1 G. Wittum, G-CSC, Universität Frankfurt
Kapitel 2 Funktionale Programmierung Kapitel 2 Funktionale Programmierung Die Welt als Ausdruck Funktionales Programmieren Erstes Programmierparadigma: - einfache Prinzipien - sehr sauber (klare Semantik)
MehrLineare Algebra II 5. Übungsblatt
Lineare Algebra II Übungsblatt Fachbereich Mathematik SS Prof Dr Kollross / Mai Susanne Kürsten Tristan Alex Gruppenübung Aufgabe G (Algebraisch abgeschlossener Körper) Ein Körper heißt algebraisch abgeschlossen,
MehrFunktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I SS 2011 Funktionstypen Funktionen haben einen Datentyp, der folgende allgemeine Form hat: functionname :: T 1 -> T 2, wobei T 1, T 2 wiederum beliebige Datentypen sind Beispiel: T 1 T 2 Der Datentyp
MehrNumerische Verfahren und Grundlagen der Analysis
Numerische Verfahren und Grundlagen der Analysis Rasa Steuding Hochschule RheinMain Wiesbaden Wintersemester 2011/12 R. Steuding (HS-RM) NumAna Wintersemester 2011/12 1 / 26 1. Folgen R. Steuding (HS-RM)
MehrBisher. Programme, Sequenzen von Formen. Ausdrücke und ihre Auswertung (Substitutionsmodell)
Bisher Programme, Sequenzen von Formen Ausdrücke und ihre Auswertung (Substitutionsmodell) Konstruktionsanleitung für Prozeduren Kurzbeschreibung Sorten und Verträge Gerüst Testfälle Rumpf ausfüllen Testen
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:
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
Mehr