Programmierung und Modellierung mit Haskell

Größe: px
Ab Seite anzeigen:

Download "Programmierung und Modellierung mit Haskell"

Transkript

1 Rekursion Terminierung Rekursionsarten Induktion Programmierung und Modellierung mit Haskell Rekursion, Terminierung, Induktion Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 20. April 2015 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-1

2 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Rekursion Man kann eine Funktion f : A B durch einen Ausdruck definieren, der selbst Funktionsanwendungen von f enthält. Beispiele: Fakultät: { 1, falls n = 0 fakultät(n) = n fakultät(n 1), sonst Summe der ersten n natürlichen Zahlen: { 0, falls n=0 summe(n) = n + summe(n 1), sonst Dies bezeichnet man als rekursive Definition. Auswerten durch Einsetzen der definierenden Gleichungen von links nach rechts: fakultät(3) 3 fakultät(3 1) 3 fakultät(2) 3 2 fakultät(2 1) 3 2 fakultät(1) fakultät(0) Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-2

3 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Rekursion Man kann eine Funktion f : A B durch einen Ausdruck definieren, der selbst Funktionsanwendungen von f enthält. Beispiele: Fakultät: fakultät 0 = 1 fakultät n = n * fakultät (n-1) Summe der ersten n natürlichen Zahlen: summe 0 = 0 summe n = n + summe (n-1) Dies bezeichnet man als rekursive Definition. Auswerten durch Einsetzen der definierenden Gleichungen von links nach rechts: fakultät(3) 3 fakultät(3 1) 3 fakultät(2) 3 2 fakultät(2 1) 3 2 fakultät(1) fakultät(0) Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-2

4 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Substitutionsmodell Das Substitutionsmodell erklärt das Verhalten von rein funktionalen Sprachen, solange keine Fehler auftreten: Man wählt einen Teilausdruck und wertet diesen gemäß den geltenden Rechenregeln aus. Eine Funktionsanwendung wird durch den definierenden Rumpf ersetzt. Dabei werden die formalen Parameter im Rumpf durch die Argumentausdrücke ersetzt ( substitutiert ). Dies wiederholt man, bis keine auswertbaren Teilausdrücke mehr vorhanden sind. Es gibt verschiedene unterschiedliche Strategien, den als nächstes auszuwertenden Teilausdruck auszuwählen. Dies ist ein rekursiver Algorithmus! Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-3

5 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Beispiel succ x = x + 1 bar x y z = if 1 < succ x then z else x+y Beispielauswertung des Ausdrucks bar 1 2 (succ 3), wobei wir zur Verdeutlichung den zu bearbeitenden Teilausdruck unterstreichen: bar 1 2 (succ 3) bar 1 2 (3+1) bar if 1 < succ 1 then 4 else 1+2 if 1 < (1 + 1) then 4 else 1+2 if 1 < 2 then 4 else 1+2 if True then 4 else 1+2 if True then 4 else 3 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-4

6 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Beispiel succ x = x + 1 bar x y z = if 1 < succ x then z else x+y Beispielauswertung des Ausdrucks bar 1 2 (succ 3), wobei wir zur Verdeutlichung den zu bearbeitenden Teilausdruck unterstreichen: bar 1 2 (succ 3) bar 1 2 (3+1) bar if 1 < succ 1 then 4 else 1+2 if 1 < (1 + 1) then 4 else 1+2 if 1 < 2 then 4 else 1+2 if True then 4 else 1+2 if True then 4 else 3 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-4

7 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Beispiel succ x = x + 1 bar x y z = if 1 < succ x then z else x+y Beispielauswertung des Ausdrucks bar 1 2 (succ 3), wobei wir zur Verdeutlichung den zu bearbeitenden Teilausdruck unterstreichen: bar 1 2 (succ 3) bar 1 2 (3+1) bar if 1 < succ 1 then 4 else 1+2 if 1 < (1 + 1) then 4 else 1+2 if 1 < 2 then 4 else 1+2 if True then 4 else 1+2 if True then 4 else 3 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-4

8 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Beispiel succ x = x + 1 bar x y z = if 1 < succ x then z else x+y Beispielauswertung des Ausdrucks bar 1 2 (succ 3), wobei wir zur Verdeutlichung den zu bearbeitenden Teilausdruck unterstreichen: bar 1 2 (succ 3) bar 1 2 (3+1) bar if 1 < succ 1 then 4 else 1+2 if 1 < (1 + 1) then 4 else 1+2 if 1 < 2 then 4 else 1+2 if True then 4 else 1+2 if True then 4 else 3 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-4

9 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Beispiel succ x = x + 1 bar x y z = if 1 < succ x then z else x+y Beispielauswertung des Ausdrucks bar 1 2 (succ 3), wobei wir zur Verdeutlichung den zu bearbeitenden Teilausdruck unterstreichen: bar 1 2 (succ 3) bar 1 2 (3+1) bar if 1 < succ 1 then 4 else 1+2 if 1 < (1 + 1) then 4 else 1+2 if 1 < 2 then 4 else 1+2 if True then 4 else 1+2 if True then 4 else 3 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-4

10 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Beispiel succ x = x + 1 bar x y z = if 1 < succ x then z else x+y Beispielauswertung des Ausdrucks bar 1 2 (succ 3), wobei wir zur Verdeutlichung den zu bearbeitenden Teilausdruck unterstreichen: bar 1 2 (succ 3) bar 1 2 (3+1) bar if 1 < succ 1 then 4 else 1+2 if 1 < (1 + 1) then 4 else 1+2 if 1 < 2 then 4 else 1+2 if True then 4 else 1+2 if True then 4 else 3 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-4

11 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Beispiel succ x = x + 1 bar x y z = if 1 < succ x then z else x+y Beispielauswertung des Ausdrucks bar 1 2 (succ 3), wobei wir zur Verdeutlichung den zu bearbeitenden Teilausdruck unterstreichen: bar 1 2 (succ 3) bar 1 2 (3+1) bar if 1 < succ 1 then 4 else 1+2 if 1 < (1 + 1) then 4 else 1+2 if 1 < 2 then 4 else 1+2 if True then 4 else 1+2 if True then 4 else 3 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-4

12 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Beispiel succ x = x + 1 bar x y z = if 1 < succ x then z else x+y Beispielauswertung des Ausdrucks bar 1 2 (succ 3), wobei wir zur Verdeutlichung den zu bearbeitenden Teilausdruck unterstreichen: bar 1 2 (succ 3) bar 1 2 (3+1) bar if 1 < succ 1 then 4 else 1+2 if 1 < (1 + 1) then 4 else 1+2 if 1 < 2 then 4 else 1+2 if True then 4 else 1+2 if True then 4 else 3 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-4

13 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Beispiel succ x = x + 1 bar x y z = if 1 < succ x then z else x+y Beispielauswertung des Ausdrucks bar 1 2 (succ 3), wobei wir zur Verdeutlichung den zu bearbeitenden Teilausdruck unterstreichen: bar 1 2 (succ 3) bar 1 2 (3+1) bar if 1 < succ 1 then 4 else 1+2 if 1 < (1 + 1) then 4 else 1+2 if 1 < 2 then 4 else 1+2 if True then 4 else 1+2 if True then 4 else 3 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-4

14 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Fibonacci-Zahlen fib 0 = 0 fib n n <= 1 = 1 otherwise = fib (n-1) + fib (n-2) > fib 8 21 > fib 9 34 fib n liefert die n-te Fibonacci-Zahl F n : 0, 1, 1, 2, 3, 5, 8, 13, 21,... fib n liefert z.b. die Hasenpopulation nach n Monaten unter der Annahme, dass Hasen jeden Monat einen Nachkommen haben, dies aber erst ab dem zweiten Lebensmonat. fib n liefert auch die Zahl der Möglichkeiten, ein 2 n Zimmer mit 1 2 Kacheln zu fliesen. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-5

15 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Programmierung und Modellierung mit Haskell Rekursion, Terminierung, Induktion Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 27. April 2015 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-5

16 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Collatz Vermutung Collatz-Vermutung: Für alle n N gibt es ein i N mit f i (n) = 1. Lothar Collatz, , dt. Mathematiker { n f (n) = 2 falls n gerade 3n + 1 sonst Es ist unbekannt, ob man für jedes n N ein i N findet. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-6

17 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Collatz Vermutung Collatz-Vermutung: Für alle n N gibt es ein i N mit f i (n) = 1. Lothar Collatz, , dt. Mathematiker { n f (n) = 2 falls n gerade 3n + 1 sonst Es ist unbekannt, ob man für jedes n N ein i N findet. Falls es ein i gibt, dann auch ein kleinstes. Wir versuchen dieses rekursiv zu berechnen: f n even n = n div 2 otherwise = 3*n+1 min_i 1 = 0 min_i n = 1 + min_i (f n) > [min_i n n <- [2..10]++[26,27,28,29]] [1,7,2,5,8,16,3,19,6,10,111,18,18] Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-6

18 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Collatz Vermutung Collatz-Vermutung: Für alle n N gibt es ein i N mit f i (n) = 1. Lothar Collatz, , dt. Mathematiker { n f (n) = 2 falls n gerade 3n + 1 sonst Es ist unbekannt, ob man für jedes n N ein i N findet. Falls es ein i gibt, dann auch ein kleinstes. Wir versuchen dieses rekursiv zu berechnen: f n n mod 2 == 0 = n div 2 otherwise = 3*n+1 min_i 1 = 0 min_i n = 1 + min_i (f n) > [min_i n n <- [2..10]++[26,27,28,29]] [1,7,2,5,8,16,3,19,6,10,111,18,18] Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-6

19 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Türme von Hanoi Es gibt drei senkrechte Stäbe. Auf dem ersten liegen n gelochte Scheiben von nach oben hin abnehmender Größe. Man soll den ganzen Stapel auf den dritten Stab transferieren, darf aber immer nur jeweils eine Scheibe entweder nach ganz unten oder auf eine größere legen. Angeblich sind in Hanoi ein paar Mönche seit Urzeiten mit dem Fall n = 64 befasst. Quelle: Wikipedia Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-7

20 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Lösung Für n = 1 kein Problem. Falls man schon weiß, wie es für n 1 geht, dann schafft man mit diesem Rezept die obersten n 1 Scheiben auf den zweiten Stab (die unterste Scheibe fasst man dabei als Boden auf.). Dann legt man die größte nunmehr freie Scheibe auf den dritten Stapel und verschafft unter abermaliger Verwendung der Vorschrift für n 1 die restlichen Scheiben vom mittleren auf den dritten Stapel. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-8

21 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Lösung in Haskell Türme werden durch Zahl 1,2,3 repräsentiert Befehle durch Paare (i, j): Bewege Scheibe von i nach j Befehlsfolgen werden durch Listen repräsentiert. hanoi 1 i j = [(i,j)] hanoi n i j = hanoi n' i othert ++ [(i,j)] ++ hanoi n' othert j where n' = n-1 othert = i-j -- other tower > hanoi [(1,2),(1,3),(2,3),(1,2),(3,1),(3,2),(1,2)] > hanoi [(1,3),(1,2),(3,2),(1,3),(2,1),(2,3),(1,3),(1,2),(3,2),(3,1),(2,1),(3,2),(1,3),(1,2),(3,2)] Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-9

22 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Allgemeines Muster einer Rekursion Eine rekursive Definition einer Funktion f : A B hat die Form f (a) = E[f, a] wobei im Ausdruck E[f, a], also dem Funktionsrumpf, sowohl das Argument a, als auch (endlich viele) Aufrufe an die definierte Funktion f selbst vorkommen dürfen. Gegenbeispiele Keine rekursiven { Definitionen sind also: 0, falls Programm für f kürzer als n KB f (n) = 1, sonst Zugriff nicht in Form von Aufrufen { 1, falls f (i) = 0 für alle i N f (n) = 0, sonst unendliche viele Aufrufe Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-10

23 Rekursion Terminierung Rekursionsarten Induktion Substitutionsmodell Beispiele Allgemein Allgemeines Muster einer Rekursion Eine rekursive Definition einer Funktion f : A B hat die Form f (a) = E[f, a] wobei im Ausdruck E[f, a], also dem Funktionsrumpf, sowohl das Argument a, als auch (endlich viele) Aufrufe an die definierte Funktion f selbst vorkommen dürfen. Gegenbeispiele Keine rekursiven { Definitionen sind also: 0, falls Programm für f kürzer als n KB f (n) = 1, sonst Zugriff nicht in Form von Aufrufen { 1, falls f (i) = 0 für alle i N f (n) = 0, sonst unendliche viele Aufrufe Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-10

24 Rekursion Terminierung Rekursionsarten Induktion Partialität Rekursive Definitionen liefern im allgemeinen nur partielle Funktionen: Die Funktionen summe und fakultät von Folie 03-2 liefern bei negativen Eingaben kein Ergebnis: > summe (-3) Heap exhausted; Grund: summe( 2) 2 + summe( 3) summe( 4) summe( 5).... Gleiches gilt für die Funktion waldläufer x = waldläufer x Bei der 3n + 1 -Funktion (min_i, Folie 03-6); weiß man nicht, ob sie wirklich für alle n definiert ist. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-11

25 Rekursion Terminierung Rekursionsarten Induktion Partialität Rekursive Definitionen liefern im allgemeinen nur partielle Funktionen: Die Funktionen summe und fakultät von Folie 03-2 liefern bei negativen Eingaben kein Ergebnis: > summe (-3) Heap exhausted; Tipp: Grund: Manche summe( 2) Computer werden 2 + unbenutzbar, summe( 3) wenn ein Programm den 2 kompletten 3 + summe( 4) Speicher belegt summe( 5).... GHC und GHCI erlaubt es, den maximal verwendeten Speicher zu beschränken, Gleiches gilt z.b. für hier dieauf Funktion 2 GB: > ghci file.hs +RTS -M2g waldläufer x = waldläufer x Bei der 3n + 1 -Funktion (min_i, Folie 03-6); weiß man nicht, ob sie wirklich für alle n definiert ist. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-11

26 Rekursion Terminierung Rekursionsarten Induktion Partialität Rekursive Definitionen liefern im allgemeinen nur partielle Funktionen: Die Funktionen summe und fakultät von Folie 03-2 liefern bei negativen Eingaben kein Ergebnis: > summe (-3) Heap exhausted; Grund: summe( 2) 2 + summe( 3) summe( 4) summe( 5).... Gleiches gilt für die Funktion waldläufer x = waldläufer x Bei der 3n + 1 -Funktion (min_i, Folie 03-6); weiß man nicht, ob sie wirklich für alle n definiert ist. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-11

27 Rekursion Terminierung Rekursionsarten Induktion Partialität Rekursive Definitionen liefern im allgemeinen nur partielle Funktionen: Die Funktionen summe und fakultät von Folie 03-2 liefern bei negativen Eingaben kein Ergebnis: > summe (-3) Heap exhausted; Grund: summe( 2) 2 + summe( 3) summe( 4) summe( 5).... Gleiches gilt für die Funktion waldläufer x = waldläufer x Bei der 3n + 1 -Funktion (min_i, Folie 03-6); weiß man nicht, ob sie wirklich für alle n definiert ist. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-11

28 Rekursion Terminierung Rekursionsarten Induktion Partialität Rekursive Definitionen liefern im allgemeinen nur partielle Funktionen: Die Funktionen summe und fakultät von Folie 03-2 liefern bei negativen Eingaben kein Ergebnis: > summe (-3) Heap exhausted; Grund: summe( 2) 2 + summe( 3) summe( 4) summe( 5).... Gleiches gilt für die Funktion waldläufer x = waldläufer x Bei der 3n + 1 -Funktion (min_i, Folie 03-6); weiß man nicht, ob sie wirklich für alle n definiert ist. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-11

29 Rekursion Terminierung Rekursionsarten Induktion Abstiegsfunktion 1/2 Gegeben sei eine rekursive Funktion f : A B f (x) = E[f, x] Um festzustellen ob f für alle Argumente einer gewählten Teilmenge A A definiert ist, kann man eine Abstiegsfunktion verwenden. Zuerst prüfen wir, ob A sinnvoll gewählt wurde. AUF) Unter der Voraussetzung x A wird im Ausdruck E[f, x] die Funktion f nur mit Argumenten y A aufgerufen. DEF) Für x A ist der Ausdruck E[f, x] definiert unter der Annahme, dass die getätigten Aufrufe von f alle definiert sind. Damit weiß man erst einmal, dass alle Funktionsanwendung f x für x A vernünftig bleiben (keine unvollständigen Patterns, etc.), aber A dom(f ) muss deshalb noch nicht gelten! Gegenbeispiel: E[f, x] = f (x) Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-12

30 Rekursion Terminierung Rekursionsarten Induktion Abstiegsfunktion 1/2 Gegeben sei eine rekursive Funktion f : A B f (x) = E[f, x] Um festzustellen ob f für alle Argumente einer gewählten Teilmenge A A definiert ist, kann man eine Abstiegsfunktion verwenden. Zuerst prüfen wir, ob A sinnvoll gewählt wurde. AUF) Unter der Voraussetzung x A wird im Ausdruck E[f, x] die Funktion f nur mit Argumenten y A aufgerufen. DEF) Für x A ist der Ausdruck E[f, x] definiert unter der Annahme, dass die getätigten Aufrufe von f alle definiert sind. Damit weiß man erst einmal, dass alle Funktionsanwendung f x für x A vernünftig bleiben (keine unvollständigen Patterns, etc.), aber A dom(f ) muss deshalb noch nicht gelten! Gegenbeispiel: E[f, x] = f (x) Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-12

31 Rekursion Terminierung Rekursionsarten Induktion Abstiegsfunktion 2/2 Sei nun zusätzlich m : A N eine Funktion mit A dom(m) und der folgenden Eigenschaft: ABST) Im Rumpf E[f, x] wird f nur für solche y A aufgerufen, für welche m(y) < m(x) gilt. Man bezeichnet so ein m als Abstiegsfunktion. AUF+DEF+ABST: Dann gilt A dom(f ). Die Abstiegsfunktion bietet also ein Maß für die Argumente einer Funktion, welches für alle Argumente von rekursiven Ausdrücken immer kleiner wird. Erinnerung an Folie 1-37: Mit dom(f ) bezeichnet man üblicherweise den Definitionsbereich (engl. Domain) einer Funktion f Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-13

32 Rekursion Terminierung Rekursionsarten Induktion Beispiel Fakultät f : Z { Z 1, falls x = 0 f (x) = x f (x 1), sonst Wir wählen A = N und m(x) = max(x, 0) mit m : Z N. In E[f, x] wird f einmal mit Argument x 1 aufgerufen, falls x 0 und gar nicht aufgerufen, falls x = 0. AUF Wenn x A und x 0 (nur dann kommt es zum Aufruf), dann ist x 1 A ; DEF Der Rumpf E[f, x] enthält nur überall definierte Ausdrücke; ABST Wenn x A und x 0, so ist m(x 1) < m(x). Also gilt N dom(f ): die durch obiges Schema definierte rekursive Funktion terminiert für alle x N. Über Argumente x Z \ N wird hier nichts ausgesagt. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-14

33 Rekursion Terminierung Rekursionsarten Induktion Beispiel für kompliziertere Abstiegsfunktion Gegeben ist die rekursive Funktion f als: { a, falls i = n foosum(i, n, a) = foosum(i + 1, n, a + i), sonst foosum(3, 6, 10) foosum(4, 6, 13) foosum(5, 6, 17) foosum(6, 6, 22) 22 Wenn man wählt A = { (i, n, a) n N, 0 i n, a Z } m(i, n, a) = max(n i, 0) kann man die Terminierung von f auf A beweisen. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-15

34 Rekursion Terminierung Rekursionsarten Induktion Beispiel für kompliziertere Abstiegsfunktion Gegeben ist die rekursive Funktion f als: { a, falls i = n foosum(i, n, a) = foosum(i + 1, n, a + i), sonst foosum(3, 6, 10) foosum(4, 6, 13) foosum(5, 6, 17) foosum(6, 6, 22) 22 Wenn man wählt A = { (i, n, a) n N, 0 i n, a Z } m(i, n, a) = max(n i, 0) kann man die Terminierung von f auf A beweisen. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-15

35 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Verschiedene Formen der Rekursion Eine rekursive Definition f (x) = E[f, x] heißt: linear, wenn in E[f, x] die Funktion f höchstens einmal aufgerufen wird. Zum Beispiel wenn in jedem Zweig höchstens ein Aufruf steht. endständig, wenn E[f, x] eine Fallunterscheidung ist und jeder Zweig, in dem f aufgerufen wird, von der Form f (G) ist, wobei G keine weiteren Aufrufe von f enthält mehrfach rekursiv, wenn E[f, x] möglicherweise mehrere Aufrufe von f (im selben Zweig) enthält verschachtelt rekursiv, wenn die Argumente y mit denen f in E[f, x] aufgerufen wird, selbst weitere Aufrufe von f enthalten wechselseitig rekursiv, wenn im Rumpf eine andere (rekursive) Funktion aufgerufen wird, welche ihrerseits f in ihrem Rumpf verwendet Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-16

36 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Lineare Rekursion Bei linearer Rekursion findet im Rumpf höchstens ein rekursiver Aufruf statt. Beispiele: Summe, Fakultät collatz x x <=1 = 0 even x = 1 + collatz (x div 2) otherwise = 1 + collatz (3 * x + 1) Auch linear, da es nur einen Aufruf pro Zweig gibt. Gegenbeispiele: Fibonacci hat zwei Aufrufe im Rumpf McCarthy s 91-Funktion mc91 n n > 100 = n-10 otherwise = mc91(mc91(n+11)) John McCarty, , amer. Informatiker Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-17

37 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Endständige Rekursion = Lineare Rekursion + Zweige aller Fallunterscheidungen sind rekursive Aufrufe, deren Ergebnisse nicht weiterverarbeitet werden. Beispiele foosum i n a i == n = a otherwise = foosum (i+1) n (a+i) collatz' acc x x <=1 = acc even x = collatz' (acc+1) (x div 2) otherwise = collatz' (acc+1) (3 * x + 1) Gegenbeispiele Alle nicht-linearen Rekursionen summe, fakultät, collatz, da das Ergebnis der Aufrufe dort noch weiterverarbeitet wird (durch Addition bzw. Multiplikation von n) Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-18

38 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Endrekursiv dank Akkumulator Endrekursion kann oft effizient abgearbeitet werden. Grund: Keine großen Zwischenergebnisse im Substitutionsmodell Beispiel: collatz 0 11 collatz 1 34 collatz 2 17 collatz 3 52 collatz 4 26 collatz Viele Rekursionen lassen sich in endständige Form bringen, wenn man das vorläufige Ergebnis in einem zusätzlichen Argument, den Akkumulator, aufsammelt. Beispiel: foosum ist eine endständige Version von summe foosum i n a i == n = a otherwise = foosum (i+1) n (a+i) foosum(0, 5, 0) foosum(1, 5, 0) foosum(2, 5, 1) foosum(3, 5, 3) foosum(4, 5, 6) foosum(5, 5, 10) = 10 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-19

39 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Endrekursiv dank Akkumulator Endrekursion kann oft effizient abgearbeitet werden. Grund: Keine großen Zwischenergebnisse im Substitutionsmodell Beispiel: collatz 0 11 collatz 1 34 collatz 2 17 collatz 3 52 collatz 4 26 collatz Viele Rekursionen lassen sich in endständige Form bringen, wenn man das vorläufige Ergebnis in einem zusätzlichen Argument, den Akkumulator, aufsammelt. Beispiel: foosum ist eine endständige Version von summe foosum i n a i == n = a otherwise = foosum (i+1) n (a+i) foosum(0, 5, 0) foosum(1, 5, 0) foosum(2, 5, 1) foosum(3, 5, 3) foosum(4, 5, 6) foosum(5, 5, 10) = 10 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-19

40 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Endrekursiv dank Akkumulator Endrekursion kann oft effizient abgearbeitet werden. Grund: Keine großen Zwischenergebnisse im Substitutionsmodell Beispiel: collatz 0 11 collatz 1 34 collatz 2 17 collatz 3 52 collatz 4 26 collatz Viele Rekursionen lassen sich in endständige Form bringen, wenn man das vorläufige Ergebnis in einem zusätzlichen Argument, den Akkumulator, aufsammelt. Beispiel: foosum ist eine endständige Version von summe foosum i n a i == n = a otherwise = foosum (i+1) n (a+i) foosum(0, 5, 0) foosum(1, 5, 0) foosum(2, 5, 1) foosum(3, 5, 3) foosum(4, 5, 6) foosum(5, 5, 10) = 10 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-19

41 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Endständige Rekursion und Iteration Endrekursion entspricht im wesentlichen einer While-Schleife: foosum i n a i == n = a otherwise = foosum (i+1) n (a+i) kann man ohne Rekursion in einer imperativen Sprache schreiben als int foosum(int i, int n, int a) { while (!(i=n)) { a = a+i; i = i+1; } return a; } Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-20

42 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Beispiel: Potenzierung Rekursives Programm zur Potenzierung: potenz :: Double -> Int -> Double potenz _x 0 = 1 potenz x n = x * potenz x (n-1) Endrekursive verallgemeinerte Version: potenz2 :: Double -> Int -> Double potenz2 x n = potenz2' n 1 where potenz2' :: Int -> Double -> Double potenz2' 0 acc = acc potenz2' m acc = potenz2' (m-1) (x*acc) Die Funktion potenz2' n acc berechnet x n acc. Da potenz2' eine lokale Definition ist, braucht die Variable x nicht erneut übergeben werden. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-21

43 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Beispiel: Potenzierung Rekursives Programm zur Potenzierung: potenz :: Double -> Int -> Double potenz _x 0 = 1 potenz x n = x * potenz x (n-1) Endrekursive verallgemeinerte Version: potenz2 :: Double -> Int -> Double potenz2 x n = potenz2' n 1 where potenz2' :: Int -> Double -> Double potenz2' 0 acc = acc potenz2' m acc = potenz2' (m-1) (x*acc) Die Funktion potenz2' n acc berechnet x n acc. Da potenz2' eine lokale Definition ist, braucht die Variable x nicht erneut übergeben werden. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-21

44 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Beispiel: Potenzierung Rekursives Programm zur Potenzierung: potenz :: Double -> Int -> Double potenz _x 0 = 1 potenz x n = x * potenz x (n-1) Endrekursive verallgemeinerte Version: potenz2 :: Double -> Int -> Double potenz2 x n = potenz2' n 1 where potenz2' :: Int -> Double -> Double potenz2' 0 acc = acc potenz2' m acc = potenz2' (m-1) (x*acc) Die Funktion potenz2' n acc berechnet x n acc. Da potenz2' eine lokale Definition ist, braucht die Variable x nicht erneut übergeben werden. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-21

45 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Schnelle Potenzierung Tatsächlich geht es aber noch besser: potenz3 :: Double -> Int -> Double potenz3 _ 0 = 1 potenz3 x n even n = x_to_halfn_sq otherwise = x * x_to_halfn_sq where x_to_halfn_sq = square (potenz3 x (n div 2)) square y = y * y Begründung: x 2k = (x k ) 2 und x 2k+1 = (x k ) 2 x. Aufgabe: Schafft es jemand, eine endrekursive Version davon anzugeben, ohne dabei in die Standardbibliothek zu spicken? Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-22

46 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Rekursion mit Listen Rekursion ist nicht auf Zahlen beschränkt: length :: [a] -> Int length [] = 0 length (_h:t) = 1 + length t length [1,2,3] 1 + (length [2,3]) (length [3]) (length []) Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-23

47 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Rekursion mit Listen Auch das Ergebnis muss keine Zahl sein: reverse :: [a] -> [a] reverse [] = [] reverse (x:xs) = reverse xs ++ [x] reverse fly reverse ly ++ f reverse y ++ l ++ f reverse ++ y ++ l ++ f ++ y ++ l ++ f ylf Rekursion eignet sich hervorragend dazu, Listen zu bearbeiten! Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-24

48 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Beispiel: Sortieren durch Einfügen insert :: Int -> [Int] -> [Int] insert x [] = [x] insert x (y:ys) x <= y = x : y : ys otherwise = y : insert x ys insert 2 [1,3,4,5] 1 : insert 2 [3,4,5] 1 : 2 : 3 : [4,5] = [1,2,3,4,5] sort :: [Int] -> [Int] sort [] = [] sort (x:xs) = insert x (sort xs) Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-25

49 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Beispiel: Sortieren durch Einfügen insert :: Int -> [Int] -> [Int] insert x [] = [x] insert x (y:ys) x <= y = x : y : ys otherwise = y : insert x ys insert 2 [1,3,4,5] 1 : insert 2 [3,4,5] 1 : 2 : 3 : [4,5] = [1,2,3,4,5] sort :: [Int] -> [Int] sort [] = [] sort (x:xs) = insert x (sort xs) Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-25

50 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Rekursion mit mehreren Listen Wir können auch mehrere Listen auf einmal berarbeiten: zip :: [a] -> [b] -> [(a,b)] zip [] _ = [] zip _ [] = [] zip (x:xs) (y:ys) = (x,y) : zip xs ys zip abc [1,2,3,4] ( a,1): zip bc [2,3,4] ( a,1):( b,2): zip c [3,4] ( a,1):( b,2):( c,3): zip [4] ( a,1):( b,2):( c,3):[] = [( a,1),( b,2),( c,3)] Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-26

51 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Richtlinien zur Rekursion Viele Studenten haben anfangs Probleme damit, bewusst rekursive Funktionen zu schreiben. G.Hutton schreibt dazu: Es ist wie Fahrrad fahren, wenn man es nicht kann sieht es unmöglich aus; und wenn man es kann, ist wirklich einfach. 1 Explizit Typ der Funktion hinschreiben hilft! 2 Fallunterscheidungen auflisten. Bei Listen ist fast immer klar, dass zwischen leerer und nicht-leerer Liste unterschieden werden muss; bei natürlichen Zahlen erfordert oft die Null eine Sonderbehandlung 3 Einfach Fälle zuerst programmieren, die rekursiven Fälle kommen dann oft von alleine. 4 In rekursiven Fällen überlegen, was zur Verfügung steht! 5 Am Ende dann verallgemeinern und vereinfachen. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-27

52 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Beispiel: drop drop ist eine Funktion der Standardbibliothek, welche eine Zahl n und eine Liste xs als Argumente nimmt, und als Ergebnis eine Liste zurückliefert, bei der die ersten n Elemente fehlen. Online-Demonstration ergab den Code: mydrop :: Int -> [a] -> [a] mydrop 0 [] = [] mydrop 0 (h:t) = h:t mydrop n [] = [] mydrop n (h:t) = mydrop (n-1) t... welchen wir anschliessend leicht vereinfachen konnten zu: mydrop 0 xs = xs mydrop _ [] = [] mydrop n (_:t) = mydrop (n-1) t Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-28

53 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Zusammenfassung Rekursion Rekursion als Mittel zur Definition von Funktionen Rekursion im Substitutionsmodell Rekursive Funktionen sind oft nicht überall definiert. Mit einer Abstiegsfunktion kann man die Definiertheit an bestimmten Stellen nachweisen. Verschiedene Arten der rekursiven Definition, insbesondere endständige Rekursion. Rekursion als Mittel zur Problemlösung (Bsp. Hanoi) Rekursion für den Umgang mit Listen (Bsp. Sortieren) Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-29

54 Rekursion Terminierung Rekursionsarten Induktion Lineare Rekursion Endständige Rekursion Allgemein Programmierung und Modellierung mit Haskell Terminierung und Endrekursion Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 30. April 2015 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-29

55 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Kachelungen Zählen Wie viele Möglichkeiten gibt es einen n 2 Korridor mit 2 1 Kacheln zu belegen? n = 1 n = 2 n = 3 n = 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-30

56 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Kachelungen Zählen Wie viele Möglichkeiten gibt es einen n 2 Korridor mit 2 1 Kacheln zu belegen? n = 1 n = 2 n = 3 n = 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-30

57 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Kachelungen Zählen Wie viele Möglichkeiten gibt es einen n 2 Korridor mit 2 1 Kacheln zu belegen? n = 1 n = 2 n = 3 n = 4 Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-30

58 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Induktionsprinzip: Beispiel 1 Wir möchten zeigen, dass die Zahl der möglichen Kachelungen eines n 2 Korridors mit 2 1 Kacheln tatsächlich gleich F n ist; wobei F 0 = F 1 = 1 und F n = F n 1 + F n 2, falls n > 1. siehe Folie 03-5 Fibonacci-Zahlen Für n = 0, 1 stimmt die Behauptung. Wenn n > 1, so gibt es zwei Möglichkeiten, die Kachelung zu beginnen: Man beginnt mit einer quergestellten Kacheln und hat dann noch eine (n 1) 2 Fläche zu kacheln. Oder man beginnt mit zwei längsgestellten Kacheln und hat dann noch eine (n 2) 2 Fläche zu kacheln. per Induktion oder rekursiv können wir annehmen, dass die Zahl der Möglichkeiten hierfür F n 1 bzw. F n 2 ist, Also ergeben sich F n 1 + F n 2 = F n Möglichkeiten, w.z.b.w. Zwei Möglichkeiten zu Beginnen: x x x Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-31

59 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Induktionsprinzip: Beispiel 2 Wir möchten zeigen, dass der auf Folie 03-8 angegebene Algorithmus tatsächlich das Hanoi-Problem löst. Für n = 1 stimmt die Behauptung. Wenn n > 1, so schafft der erste Aufruf per Induktion die obersten n 1 Scheiben auf den Hilfsstapel; der nächste Befehl schafft die unterste Scheibe ans Ziel; der zweite Aufruf schafft wiederum per Induktion die n 1 Scheiben vom Hilfsstapel ans Ziel. Quelle: Wikipedia Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-32

60 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Induktionsprinzip: Beispiel 3 Wir möchten zeigen, dass jede Befehlsfolge für das Hanoi-Puzzle, welche n Scheiben von einem Stapel auf einen anderen schafft, mindestens 2 n 1 Befehle enthält. Für n = 1 stimmt das: = 1; eine Scheibe ist zu bewegen. Wenn n > 1, so muss irgendwann die unterste Scheibe bewegt werden und zwar auf einen freien Stapel; also eine Bewegung. Vorher müssen aber die n 1 darüberliegenden Scheiben auf den jeweils anderen verschafft wurden, damit dort Platz ist. Per Induktion erfordert das mindestens 2 n 1 1 Befehle. Anschließend müssen diese n 1 Scheiben auch ans Ziel, macht noch einmal mindestens 2 n 1 1 Befehle. Insgesamt also mindestens 2(2 n 1 1) + 1 = 2 n 1 Befehle. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-33

61 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Das Induktionsprinzip Ein Induktionsbeweis ist eigentlich ein rekursiver Beweis. Man darf die zu beweisende Aussage selbst benutzen. Allerdings muss die Kette solcher Rückgriffe irgendwann zum Ende kommen. Dafür bietet sich eine Abstiegsfunktion an. Induktionsprinzip Es sei A eine Menge, P eine Eigenschaft auf A (formal P A) und m : A N eine Funktion, sodass für alle a A gilt: a ist in P unter der Annahme, dass alle y A mit m(y) < m(a) in P sind Dann ist P = A, also alle Elemente von A haben die Eigenschaft P. Insbesondere muss natürlich für alle a mit m(a) = 0 direkt a P gezeigt werden, da es in diesem Fall keine y mit m(y) < m(a) gibt. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-34

62 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Beweis des Induktionsprinzips Induktionsprinzip Es sei A eine Menge, P eine Eigenschaft auf A (formal P A) und m : A N eine Funktion, sodass für alle a A gilt: a ist in P unter der Annahme, dass alle y A mit m(y) < m(a) in P sind Dann ist P = A, also alle Elemente von A haben die Eigenschaft P. Beweis Wenn P A gelten würde, so sei a A \ P ein Gegenbeispiel mit minimalem m-wert. Für alle y mit m(y) < m(a) gelte also y P. Nach Annahme gilt dann aber auch a P. Ein Widerspruch. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-35

63 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Anmerkungen Oft ist A = N und m(a) = a. Dann darf man also verwenden, dass die Behauptung y P für alle y < a schon gezeigt ist und hat dann a P daraus herzuleiten. Bisweilen erlaubt man hier nur den Rückgriff auf a 1 und nicht auf beliebiges y < a. Man kann auch Induktionsprinzipien für andere Maß-Werte als N betrachten. Es kommt nur darauf an, dass jede echt absteigende Kette von Maß-Werten irgendwann zum Ende kommt. Beispiel: Paare von natürlichen Zahlen mit der lexikographischen Ordnung. In den meisten Fällen kommt man aber mit N-wertigen Abstiegsfunktionen aus. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-36

64 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Beispiel: Endständige Rekursion foosum (i,n,a) i>=n = a otherwise = foosum (i+1,n,a+i) Man zeige durch Induktion, dass foosum(i, n, a) = a + n 1 j=i j. Als Abstiegsfunktion nimmt man m(i, n, a) = max(n i, 0). Falls m(i, n, a) = 0 so gilt i n. Damit ist die Summe leer und wir haben foosum(n, n, a) = a = a + n 1 j=n j Falls m(i, n, a) > 0 so gilt i < n und damit nach der Definition foosum(i, n, a) = foosum(i + 1, n, a + i) Wegen m(i, n, a) > m(i + 1, n, a + i) folgern wir mit Induktion foosum(i + 1, n, a + i) = a + i + n 1 j=i+1 n 1 j = a + j j=i Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-37

65 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Partielle Korrektheit Oft hat man eine rekursive Funktion f (a) = E[f, a] gegeben und möchte eine Aussage der Form a D.Q(a, f (a)) zeigen, wobei D der Definitionsbereich von f ist. Es genügt dann, für jedes a zu zeigen, dass Q(a, f (a)) erfüllt ist unter der Annahme, dass für alle rekursiven Aufrufe f (a 1 ),..., f (a n ), die in E[f, a] vorkommen, bereits Q(a i, f (a i )) erfüllt ist. Man kann nämlich dann als Abstiegsfunktion die Zahl der Auswertungsschritte nehmen. Auf dem Definitionsbereich ist diese erklärt und für alle rekursiven Aufrufe strikt kleiner. Damit haben wir bewiesen: Falls die Berechnung terminiert, dann erfüllt das Ergebnis die gewünschte Eigenschaft. Bemerkung: Will man eine rekursive Funktion zu verifizieren, so darf man die rekursiven Aufrufe bereits als korrekt annehmen. Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-38

66 Rekursion Terminierung Rekursionsarten Induktion Beispiele Induktionsprinzip Zusammenfassung Induktion Induktion als rekursiver Beweis mit überall definierter Abstiegsfunktion Beispiele: Kachelungen, Türme von Hanoi, Endrekursion Induktion ist ein Beweisverfahren um Aussagen über unendliche Mengen zu treffen. Partielle Korrektheit als Spezialfall der Induktion Martin Hofmann, Steffen Jost Programmierung und Modellierung 03-39

Einführung in die Funktionale Programmierung mit Haskell

Einführung in die Funktionale Programmierung mit Haskell Einführung in die Funktionale Programmierung mit Haskell Rekursion LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 25. April 2013 Planung Achtung: Nächste

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

Inhalt Kapitel 3: Induktion und Termination

Inhalt Kapitel 3: Induktion und Termination Inhalt Kapitel 3: Induktion und Termination 1 Wohlfundierte Relationen Ackermannfunktion 2 Untere Schranke für Türme von Hanoi Weitere Beispiele 52 Wohlfundierte Relationen Wohlfundierte Relationen Definition

Mehr

Rekursive Funktionen

Rekursive Funktionen Rekursive Funktionen Man kann eine Funktion f : A B durch einen Term definieren, der selbst Aufrufe von f enthält. Beispiel: fakultät = function(n)if n = 0 then 1 else n fakultät(n 1) Dies bezeichnet man

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

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

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

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

Strukturelle Rekursion und Induktion

Strukturelle Rekursion und Induktion Kapitel 2 Strukturelle Rekursion und Induktion Rekursion ist eine konstruktive Technik für die Beschreibung unendlicher Mengen (und damit insbesondere für die Beschreibung unendliche Funktionen). Induktion

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

Funktionale Programmierung ALP I. Die Natur rekursiver Funktionen SS Prof. Dr. Margarita Esponda. Prof. Dr.

Funktionale 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

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr.

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr. ALP I Funktionen höherer Ordnung Teil 2 SS 2013 Funktionen höherer Ordnung Nehmen wir an, wir möchten alle Zahlen innerhalb einer Liste miteinander addieren addall:: (Num a) => [a -> a addall [ = 0 addall

Mehr

Crashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin

Crashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin Crashkurs Haskell Mentoring WiSe 2016/17 Anja Wolffgramm Freie Universität Berlin 02/11/2016 , Inhalt Kommandozeile Haskell installieren & starten Ein 1. Haskell-Programm Funktionsdefinition Primitive

Mehr

Programmieren in Haskell Programmiermethodik

Programmieren in Haskell Programmiermethodik Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs

Mehr

Einführung in die Theoretische Informatik

Einführung in die Theoretische Informatik Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Sascha Böhme, Lars Noschinski Sommersemester 2011 Lösungsblatt 9 25. Juli 2011 Einführung in die Theoretische Informatik

Mehr

INFORMATIK FÜR BIOLOGEN

INFORMATIK FÜR BIOLOGEN Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie

Mehr

Tutoraufgabe 1 (Auswertungsstrategie):

Tutoraufgabe 1 (Auswertungsstrategie): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Auswertungsstrategie): Gegeben sei das folgende Haskell-Programm: absteigend :: Int - > [ Int

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 2. Rekursive Funktionen und Induktion 1. Dateien laden, Kommentare und Fallunterscheidungen 2. Rekursive Funktionen

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

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

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

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

Programmierung 1 - Repetitorium

Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage: http://info1.marcwagner.info Donnerstag, den 10.04.03 Kapitel 7 Korrektheit 7.1 Abstrakte Prozeduren Abstrakte Prozedur

Mehr

Informatik I. Informatik I Iteration vs. Rekursion. Iteration vs. Rekursion Iteration vs. Rekursion. 20. Iteration vs.

Informatik I. Informatik I Iteration vs. Rekursion. Iteration vs. Rekursion Iteration vs. Rekursion. 20. Iteration vs. Informatik I 1. Februar 2011 20. Informatik I 20. Jan-Georg Smaus 20.1 Albert-Ludwigs-Universität Freiburg 1. Februar 2011 Jan-Georg Smaus (Universität Freiburg) Informatik I 1. Februar 2011 1 / 31 Jan-Georg

Mehr

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie 1 Einführung 2 Typ-0- und Typ-1-Sprachen 3 Berechnungsmodelle 4 Unentscheidbarkeit 5 Unentscheidbare Probleme 6 Komplexitätstheorie WS 11/12 155 Überblick Zunächst einmal definieren wir formal den Begriff

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

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 4: Wörter (und vollständige Induktion) Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Oktober 2008 1/29 Überblick Wörter Wörter Das leere Wort Mehr zu

Mehr

2. Imperative Programmierung und Berechenbarkeit - Registermaschinen -

2. Imperative Programmierung und Berechenbarkeit - Registermaschinen - 2. Imperative Programmierung und Berechenbarkeit - Registermaschinen - 2.1 Definition 2.2 Loop-Programme 2.3 While Programme 2.4 While Programme und rekursive Funktionen Im Wesentlichen: Tafel! Maschinenmodell

Mehr

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel Inhalt Hoare-Kalkül Formale Verifizierung Hoare-Kalkül while-sprache Terminierung Partielle / totale Korrektheit 4.0 Hoare-Kalkül entwickelt von C.A.R. (Tony) Hoare (britischer Informatiker), 1969 formales

Mehr

Fallstudie: Nim Spiel

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

Mehr

Einführung in die Informatik 1

Einführung in die Informatik 1 Einführung in die Informatik 1 Algorithmen und algorithmische Sprachkonzepte Sven Kosub AG Algorithmik/Theorie komplexer Systeme Universität Konstanz E 202 Sven.Kosub@uni-konstanz.de Sprechstunde: Freitag,

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel

Mehr

WS 2011/2012. RobertGiegerich. November 12, 2013

WS 2011/2012. RobertGiegerich. November 12, 2013 WS 2011/2012 Robert AG Praktische Informatik November 12, 2013 Haskell-Syntax: Ergänzungen Es gibt noch etwas bequeme Notation für Fallunterscheidungen, die wir bisher nicht benutzt haben. Bisher kennen

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

Vorlesung. Vollständige Induktion 1

Vorlesung. Vollständige Induktion 1 WS 015/16 Vorlesung Vollständige Induktion 1 1 Einführung Bei der vollständigen Induktion handelt es sich um ein wichtiges mathematisches Beweisverfahren, mit dem man Aussagen, die für alle natürlichen

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

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie 1 Einführung 2 Typ-0- und Typ-1-Sprachen 3 Berechnungsmodelle 4 Unentscheidbarkeit 5 Unentscheidbare Probleme 6 Komplexitätstheorie 139 Unentscheidbarkeit Überblick Zunächst einmal definieren wir formal

Mehr

Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz

Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz Funktionale Programmierung Das Funktionale Quiz 31.5.2005 Nenne eine Gemeinsamkeit zwischen Typklassen und OO-Klassen Das Funktionale Quiz Das Funktionale Quiz Nenne einen Unterschied zwischen Typklassen

Mehr

Semantik von Programmiersprachen SS 2017

Semantik von Programmiersprachen SS 2017 Lehrstuhl für Programmierparadigmen Denis Lohner Sebastian Ullrich denis.lohner@kit.edu sebastian.ullrich@kit.edu Semantik von Programmiersprachen SS 2017 http://pp.ipd.kit.edu/lehre/ss2017/semantik Lösungen

Mehr

Teil 7: Rekursion; Imperative Programme

Teil 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

Mehr

1.2 Eigenschaften der ganzen Zahlen

1.2 Eigenschaften der ganzen Zahlen Lineare Algebra I WS 2015/16 c Rudolf Scharlau 13 1.2 Eigenschaften der ganzen Zahlen Dieser Abschnitt handelt von den gewöhlichen ganzen Zahlen Z und ihren Verknüpfungen plus und mal. Man kann die natürlichen

Mehr

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Klausur Prof. Dr. Helmut Seidl, T. M. Gawlitza, S. Pott,

Mehr

Musterlösung zur 2. Aufgabe der 4. Übung

Musterlösung zur 2. Aufgabe der 4. Übung Musterlösung zur 2. Aufgabe der 4. Übung Da viele von Euch anscheinend noch Probleme mit dem Entfalten haben, gibt es für diese Aufgabe eine Beispiellösung von uns. Als erstes wollen wir uns noch einmal

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

Vorlesung Diskrete Strukturen Die natürlichen Zahlen

Vorlesung Diskrete Strukturen Die natürlichen Zahlen Vorlesung Diskrete Strukturen Die natürlichen Zahlen Bernhard Ganter WS 2009/10 Alles ist Zahl? Wenn in der modernen Mathematik alles auf Mengen aufgebaut ist, woher kommen dann die Zahlen? Sind Zahlen

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

Lazy Pattern Matching. 10. Dezember 2014

Lazy Pattern Matching. 10. Dezember 2014 Lazy Lazy s Universität Bielefeld AG Praktische Informatik 10. Dezember 2014 Themen-Vorschau : as-s und lazy s Client-Server-Programmierung Lazy s matching (alias Mustervergleich) kennen wir bereits aus

Mehr

Lösungsvorschlag Serie 2 Rekursion

Lösungsvorschlag Serie 2 Rekursion (/) Lösungsvorschlag Serie Rekursion. Algorithmen-Paradigmen Es gibt verschiedene Algorithmen-Paradigmen, also grundsätzliche Arten, wie man einen Algorithmus formulieren kann. Im funktionalen Paradigma

Mehr

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

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon

Mehr

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Kapitel 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

Mehr

4. ggt und kgv. Chr.Nelius: Zahlentheorie (SS 2007) 9

4. ggt und kgv. Chr.Nelius: Zahlentheorie (SS 2007) 9 Chr.Nelius: Zahlentheorie (SS 2007) 9 4. ggt und kgv (4.1) DEF: Eine ganze Zahl g heißt größter gemeinsamer Teiler (ggt) zweier ganzer Zahlen a und b, wenn gilt: GGT 0 ) g 0 GGT 1 ) g a und g b GGT 2 )

Mehr

Kapitel 2. Mathematische Grundlagen. Skript zur Vorlesung Einführung in die Programmierung

Kapitel 2. Mathematische Grundlagen. Skript zur Vorlesung Einführung in die Programmierung LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE Kapitel 2 Mathematische Grundlagen Skript zur Vorlesung Einführung in die Programmierung im Wintersemester 2012/13 Ludwig-Maximilians-Universität

Mehr

Numerische Verfahren und Grundlagen der Analysis

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

Mehr

Programmieren für Fortgeschrittene

Programmieren für Fortgeschrittene Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme Wintersemester 2011/12 Programmieren für Fortgeschrittene Rekursive Spezifikationen Die folgende

Mehr

3 Vom Zählen zur Induktion

3 Vom Zählen zur Induktion 7 3 Vom Zählen zur Induktion 3.1 Natürliche Zahlen und Induktions-Prinzip Seit unserer Kindheit kennen wir die Zahlen 1,, 3, 4, usw. Diese Zahlen gebrauchen wir zum Zählen, und sie sind uns so vertraut,

Mehr

WS 2013/2014. Robert Giegerich. 11. Dezember 2013

WS 2013/2014. Robert Giegerich. 11. Dezember 2013 WS 2013/2014 Robert AG Praktische Informatik 11. Dezember 2013 höherer Ordnung Worum geht es heute? In Haskell gibt es, die als Argument haben oder als Ergebnis liefern. Diese nennt man höherer Ordnung.

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

Diskrete Strukturen Kapitel 2: Grundlagen (Beweise)

Diskrete Strukturen Kapitel 2: Grundlagen (Beweise) WS 2014/15 Diskrete Strukturen Kapitel 2: Grundlagen (Beweise) Hans-Joachim Bungartz Lehrstuhl für wissenschaftliches Rechnen Fakultät für Informatik Technische Universität München http://www5.in.tum.de/wiki/index.php/diskrete_strukturen_-_winter_14

Mehr

n(n + 1)(2n + 1). 6 j 2 = Hinweis: Setze für n IN n(n + 1)(2n + 1) 6 A(n) : und wähle die Bezeichnung s n := n (2j + 1) = n2 (2j + 1) = (n + 1)2

n(n + 1)(2n + 1). 6 j 2 = Hinweis: Setze für n IN n(n + 1)(2n + 1) 6 A(n) : und wähle die Bezeichnung s n := n (2j + 1) = n2 (2j + 1) = (n + 1)2 15. Dezember 2006 Arbeitsblatt 9 Übungen zu Mathematik I für das Lehramt an der Grund- und Mittelstufe sowie an Sonderschulen I. Gasser, H. Strade, B. Werner WiSe 06/07 19.12.06 Präsenzaufgaben: 1. Zu

Mehr

VL06: Haskell (Funktionen höherer Ordnung, Currying)

VL06: Haskell (Funktionen höherer Ordnung, Currying) VL06: Haskell (Funktionen höherer Ordnung, Currying) IFM 5.3 Spezielle Methoden der Programmierung Carsten Gips, FH Bielefeld 18.05.2015 Wiederholung Wiederholung Wie können Sie die ersten n Elemente einer

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

8. Musterlösung zu Mathematik für Informatiker II, SS 2004

8. Musterlösung zu Mathematik für Informatiker II, SS 2004 8. Musterlösung zu Mathematik für Informatiker II, SS 2004 MARTIN LOTZ &MICHAEL NÜSKEN Aufgabe 8.1 (Polynomdivision). (8 Punkte) Dividiere a mit Rest durch b für (i) a = x 7 5x 6 +3x 2 +1, b = x 2 +1in

Mehr

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9)

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9) Fachrichtung 6. Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung Programmierung (Wintersemester 5/6) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9) Hinweis: Dieses

Mehr

C.3 Funktionen und Prozeduren

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

3. Der größte gemeinsame Teiler

3. Der größte gemeinsame Teiler Chr.Nelius: Zahlentheorie (SoSe 2016) 18 3. Der größte gemeinsame Teiler (3.1) DEF: a und b seien beliebige ganze Zahlen. a) Eine ganze Zahl t heißt gemeinsamer Teiler von a und b, wenn gilt t a und t

Mehr

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell): Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel

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

Grundlagen der Programmierung (Vorlesung 15)

Grundlagen 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

Informatik I Für eine feste Zahl. Informatik I Benutzereingaben Eine Funktion factorial Iteration von unten. 18.

Informatik I Für eine feste Zahl. Informatik I Benutzereingaben Eine Funktion factorial Iteration von unten. 18. Informatik I 25. Januar 2011 18. Schleifen und Iteration Informatik I 18. Schleifen und Iteration Jan-Georg Smaus Albert-Ludwigs-Universität Freiburg 25. Januar 2011 18.1 Für eine feste Zahl 18.2 Benutzereingaben

Mehr

Rekursion. Sie wissen wie man Programme rekursiv entwickelt. Sie kennen typische Beispiele von rekursiven Algorithmen

Rekursion. Sie wissen wie man Programme rekursiv entwickelt. Sie kennen typische Beispiele von rekursiven Algorithmen Rekursion Sie wissen wie man Programme rekursiv entwickelt Sie kennen typische Beispiele von rekursiven Algorithmen Sie kennen die Vor-/Nachteile von rekursiven Algorithmen Einführung 2 von 40 Rekursiver

Mehr

Kapitel 1. Grundlegendes

Kapitel 1. Grundlegendes Kapitel 1 Grundlegendes Abschnitt 1.4 Vollständige Induktion Charakterisierung der natürlichen Zahlen Die Menge N 0 = {0, 1, 2, 3,...} der natürlichen Zahlen läßt sich wie folgt charakterisieren: 1. 0

Mehr

= =

= = 9. Januar 2007 Arbeitsblatt 9 Übungen zu Mathematik I für das Lehramt an der Grund- und Mittelstufe sowie an Sonderschulen I. Gasser, H. Strade, B. Werner WiSe 06/07 19.12.06 Präsenzaufgaben: 1. Zu Beginn

Mehr

Universität Innsbruck WS 2013/2014. Brückenkurs. Formale Konzepte. 3. Auflage. Harald Zankl. 15. Januar 2014

Universität Innsbruck WS 2013/2014. Brückenkurs. Formale Konzepte. 3. Auflage. Harald Zankl. 15. Januar 2014 Universität Innsbruck WS 013/014 Brückenkurs Formale Konzepte 3. Auflage Harald Zankl 15. Januar 014 Institut für Informatik Innsbruck, Österreich Inhaltsverzeichnis 1 Definition, Satz, Beweis 1.1 Aufgaben................................

Mehr

Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation

Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation Grundlagen der Programm- und Systementwicklung Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation Technische Universität München Institut für Informatik Software &

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

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

Donnerstag, 11. Dezember 03 Satz 2.2 Der Name Unterraum ist gerechtfertigt, denn jeder Unterraum U von V ist bzgl.

Donnerstag, 11. Dezember 03 Satz 2.2 Der Name Unterraum ist gerechtfertigt, denn jeder Unterraum U von V ist bzgl. Unterräume und Lineare Hülle 59 3. Unterräume und Lineare Hülle Definition.1 Eine Teilmenge U eines R-Vektorraums V heißt von V, wenn gilt: Unterraum (U 1) 0 U. (U ) U + U U, d.h. x, y U x + y U. (U )

Mehr

Abschnitt 3: Mathematische Grundlagen

Abschnitt 3: Mathematische Grundlagen Abschnitt 3: Mathematische Grundlagen 3. Mathematische Grundlagen 3.1 3.2 Induktion und Rekursion 3.3 Boolsche Algebra Peer Kröger (LMU München) Einführung in die Programmierung WS 14/15 48 / 155 Überblick

Mehr

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, 13.00-14.45 Uhr Bearbeitungszeit: 105 Minuten Schalten Sie ihr Mobiltelefon aus. Bei der Klausur ist als einziges

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

5. Ordinalzahlen (Vorlesung 11)

5. Ordinalzahlen (Vorlesung 11) EINFÜHRUNG IN DIE LOGIK UND MENGENLEHRE 29 5.. Grundlegende Eigenschaften. 5. Ordinalzahlen (Vorlesung ) Definition 5. (Wohlordnung). Eine lineare Ordnung < auf einer Menge a heißt Wohlordnung, wenn jede

Mehr

Unendliche Listen und Bäume

Unendliche Listen und Bäume Funktionale Programmierung Unendliche Listen und Bäume Helga Karafiat, Steffen Rüther Übersicht Grundlage: Lazy Evaluation Konstruktion von unendlichen Strukturen Verwendung von unendlichen Listen Unendliche

Mehr

3.2.6 Sprünge. Hier: Beschränkung auf gute Sprünge wie return break continue. Beachte: Ein Sprung hat keinen Effekt auf die Programmvariablen.

3.2.6 Sprünge. Hier: Beschränkung auf gute Sprünge wie return break continue. Beachte: Ein Sprung hat keinen Effekt auf die Programmvariablen. 3.2.6 Sprünge (1.3.5 ) Hier: Beschränkung auf gute Sprünge wie return break continue Beachte: Ein Sprung hat keinen Effekt auf die Programmvariablen. { P }... { Q } break L;... { Q } { P } L : {... { Q

Mehr

Vorkurs: Mathematik für Informatiker

Vorkurs: Mathematik für Informatiker Vorkurs: Mathematik für Informatiker Teil 3 Wintersemester 2016/17 Steven Köhler mathe@stevenkoehler.de mathe.stevenkoehler.de 2 c 2016 Steven Köhler Wintersemester 2016/17 Inhaltsverzeichnis Teil 1 Teil

Mehr

Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet.

Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet. 3.6 Rekursion Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet. Klassisches Beispiel: Berechnung von n! (Fakultät

Mehr

Theorembeweiserpraktikum SS 2016

Theorembeweiserpraktikum SS 2016 Institut für Programmstrukturen und Datenorganisation Lehrstuhl Programmierparadigmen Am Fasanengarten 5 76131 Karlsruhe http://pp.ipd.kit.edu/ Theorembeweiserpraktikum SS 2016 http://pp.ipd.kit.edu/lehre/ss2016/tba

Mehr

Einführung in die Informatik 2

Einführung in die Informatik 2 Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Hupel, Lars Noschinski, Dr. Jasmin Blanchette Wintersemester 2013/14 Abschlussklausur 21. Februar 2014 Einführung

Mehr

Vollständige Induktion

Vollständige Induktion Angenommen, wir wollen zeigen, dass eine Aussage P(n) für alle n N wahr ist. Anders ausgedrückt: Es gilt n N : P(n) Hierzu können wir die Technik der vollständigen Induktion verwenden. Wir zeigen, dass

Mehr

Vollständige Induktion. Analysis I. Guofang Wang. Universität Freiburg

Vollständige Induktion. Analysis I. Guofang Wang. Universität Freiburg Universität Freiburg 26.10.2011 Vollständige Induktion Wir unterbrechen jetzt die Diskussion der Axiome der reellen Zahlen, um das Beweisverfahren der vollständigen Induktion kennenzulernen. Wir setzen

Mehr

Funktionale Programmierung ALP I. µ-rekursive Funktionen WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung ALP I. µ-rekursive Funktionen WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I µ-rekursive Funktionen WS 2012/2013 Primitiv-rekursive Funktionen Jede primitiv-rekursive Funktion ist Loop-berechenbar. Das bedeutet, dass jede PR-Funktion in der Loop-Programmiersprache formuliert

Mehr

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10. Universität Bielefeld AG Praktische Informatik 10. Dezember 2014 Wiederholung: Schema: f :: [σ] -> τ f [] = e 1 f (a : as) = e 2 where s = f as wobei e 1 und e 2 Ausdrücke vom Typ τ sind und e 2 die Variablen

Mehr

1 Folgen und Stetigkeit

1 Folgen und Stetigkeit 1 Folgen und Stetigkeit 1.1 Folgen Eine Folge ist eine durchnummerierte Zusammenfassung von reellen Zahlen. Sie wird geschrieben als (a 1, a 2, a 3,...) = (a n ) n N. Es ist also a n R. Der Index n gibt

Mehr

Programmiergrundkurs

Programmiergrundkurs Programmiergrundkurs Aufgaben und Anleitung Lucas Mann 13.01.2016 1 Übersetzung in Python Als erstes machen wir uns damit vertraut, wie man in Python Algorithmen schreiben kann. Einen Algorithmus kannst

Mehr

Mathematik für Naturwissenschaftler I WS 2009/2010

Mathematik für Naturwissenschaftler I WS 2009/2010 Mathematik für Naturwissenschaftler I WS 2009/2010 Lektion 8 10. November 2009 Kapitel 2. Konvergenz von Folgen und Reihen Definition 27. Eine (reelle bzw. komplexe) Zahlenfolge ist eine R- bzw. C-wertige

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

Programmieren I. Kapitel 5. Kontrollfluss

Programmieren I. Kapitel 5. Kontrollfluss Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,

Mehr

Liste: beliebig lange, geordnete Sequenz von Termen. Kopf ist erstes Listenelement, Schwanz die restliche Liste

Liste: beliebig lange, geordnete Sequenz von Termen. Kopf ist erstes Listenelement, Schwanz die restliche Liste Listen Liste: beliebig lange, geordnete Sequenz von Termen.(Kopf, Schwanz) Kopf ist erstes Listenelement, Schwanz die restliche Liste leere Liste [] Ende der Liste wird durch [] gekennzeichnet Beispiel:

Mehr

Vorkurs Mathematik und Informatik Mengen, natürliche Zahlen, Induktion

Vorkurs Mathematik und Informatik Mengen, natürliche Zahlen, Induktion Vorkurs Mathematik und Informatik Mengen, natürliche Zahlen, Induktion Saskia Klaus 07.10.016 1 Motivation In den ersten beiden Vorträgen des Vorkurses haben wir gesehen, wie man aus schon bekannten Wahrheiten

Mehr

3. rekursive Definition einer Folge

3. rekursive Definition einer Folge 3. rekursive Definition einer Folge In vielen Fällen ist eine explizite Formel für das n-te Glied nicht bekannt, es ist hingegen möglich, aus den gegebenen Gliedern das nächste Glied zu berechnen, d.h.

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen und Algorithmen Datenstrukturen und Algorithmen VO 708.031 27.10.2011 stefan.klampfl@tugraz.at 1 Wiederholung Wir vergleichen Algorithmen anhand des ordnungsmäßigen Wachstums von T(n), S(n), Asymptotische Schranken: O-Notation:

Mehr