Software Entwicklung 1
|
|
|
- Britta Albrecht
- vor 6 Jahren
- Abrufe
Transkript
1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern
2 Lernziele Rekursive Prozeduren zu charakterisieren. Terminierung von rekursiven Prozeduren mit Hilfe von geeigneten Abstiegsfunktionen zu beweisen. Lexikographische Ordnungen auf Zahlenpaaren anzuwenden. Iterative und rekursive Varianten eines Algorithmus anzugeben und zu vergleichen. Bieniusa Software Entwicklung 1 2/ 63
3 Rekursion Bieniusa Software Entwicklung 1 3/ 63
4 Das Ende einer WG-Party! Sie laufen an der Küche vorbei und jemand gibt Ihnen den Auftrag: Was tun Sie? Spülen Sie das Geschirr! Bieniusa Software Entwicklung 1 4/ 63
5 Das Ende einer WG-Party! Sie laufen an der Küche vorbei und jemand gibt Ihnen den Auftrag: Spülen Sie das Geschirr! Was tun Sie? Idee! Sie spülen ein einziges Teil Dann suchen Sie die nächste Person, um ihr/ihm zu sagen, dass sie den Abwasch erledigen soll. Bieniusa Software Entwicklung 1 4/ 63
6 Das Ende einer WG-Party! Sie laufen an der Küche vorbei und jemand gibt Ihnen den Auftrag: Spülen Sie das Geschirr! Was tun Sie? Idee! Sie spülen ein einziges Teil Dann suchen Sie die nächste Person, um ihr/ihm zu sagen, dass sie den Abwasch erledigen soll. Die nächste Person macht es genauso: Sie spült ein Teil und bittet den/die Nächste... Die letzte Person findet ein leeres Spülbecken vor. Bieniusa Software Entwicklung 1 4/ 63
7 Rekursive Algorithmen Eine Prozedur, die einen Teil der Aufgabe selbst löst und dann den Rest erledigt, indem sie sich selbst aufruft, wird rekursive Prozedur genannt. Beispiel: Geschirrspülen Falls das Spülbecken leer ist, ist nichts mehr zu tun. Andernfalls: Spüle ein Teil; Finde die nächste Person und sage ihr Erledige den Abwasch. Beispiel: Sortieren eines Papierstapels Falls der Stapel aus einem Blatt Papier besteht, so ist er schon sortiert. Andernfalls: Teile den Stapel in zwei kleinere Stapel; Sortiere die kleineren Stapel; Füge die beiden sortierten Stapel wieder zu einem Stapel zusammen. Bieniusa Software Entwicklung 1 5/ 63
8 Warum funktioniert der Trick? Rekursion ist ein einfaches und mächtiges Prinzip, mit dem viele Probleme gehandhabt werden können. Die Problemgröße im aktuellen Aufruf kann durch einen diskreten Wert n beschrieben werden (z.b. Anzahl der Geschirrteile, Größe des Stapels). Die Größe des Teilproblems im rekursiven Aufruf muss kleiner sein als n. Die Zerlegung in Teilprobleme bricht irgendwann ab (z.b. wenn das Spülbecken leer ist, wenn der Stapel nur aus einem Blatt Papier besteht). Bieniusa Software Entwicklung 1 6/ 63
9 Weihnachtswunschzettel! Douglas Hofstadter: Gödel, Escher, Bach - Ein Endloses Geflochtenes Band. Verlag Klett-Cotta. Bieniusa Software Entwicklung 1 7/ 63
10 Begriffsklärung: Rekursion Eine Methodendeklaration m heißt direkt rekursiv, wenn der Methodenrumpf einen Aufruf von m enthält. Eine Menge von Methodendeklarationen heißen verschränkt rekursiv oder indirekt rekursiv (engl. mutually recursive), wenn die Deklarationen gegenseitig voneinander abhängen. Eine Methodendeklaration heißt rekursiv, wenn sie direkt rekursiv ist oder Element einer Menge verschränkt rekursiver Methoden ist. Bieniusa Software Entwicklung 1 8/ 63
11 Beispiel: Verschränkte Rekursion public static boolean istgerade ( int n) { if (n == 0) { return true ; else { return istungerade (n -1) ; public static boolean istungerade ( int n){ if (n == 0) { return false ; else { return istgerade (n -1) ; Bieniusa Software Entwicklung 1 9/ 63
12 Beispiel: Fakultätsfunktion n! = { n (n 1)! falls n > 0 1 falls n = 0 public static int fac ( int n) { if (n == 0) { return 1; else { return n * fac (n -1) ; Basisfall liefert Wert ohne nachfolgenden rekursiven Aufruf. Rekursionsschritt verwendet Ergebnis von rekursiven Methodenaufrufen für (andere) Parameterwerte für die Berechnung im aktuellen Methodenaufruf. Eine rekursive Methodendeklaration m heißt linear rekursiv, wenn in jedem Ausführungszweig höchstens ein Aufruf von m auftritt. Bieniusa Software Entwicklung 1 10/ 63
13 Beispiel: Fibonacci-Folge Jede Fibonacci-Zahl ist die Summe ihrer beiden Vorgänger: für n = 0 fib(n) = 1 für n = 1 fib(n 1) + fib(n 2) für n 2 public static int fib ( int n) { if (n == 0) { return 0; if (n == 1) { return 1; return fib (n -2) + fib (n -1) ; Eine rekursive Methodendeklaration m, die nicht linear rekursiv ist, heißt kaskadenartig rekursiv. Bieniusa Software Entwicklung 1 11/ 63
14 Repetitive Rekursion Eine linear rekursive Methodendeklaration m heißt repetitiv rekursiv (auch endrekursiv, engl. tail recursive), wenn jeder Aufruf von m in m der letzte auszuwertende Ausdruck ist. // groesster gemeinsamer Teiler von m und n public static int ggt ( int m, int n) { if (m == n) { return m; else if (m > n) { return ggt (m-n, n); else { return ggt (m, n- m); Bieniusa Software Entwicklung 1 12/ 63
15 Umwandlung in repetitiv-rekursive Variante public static int fac ( int n) { if (n == 0) { return 1; else { return n * fac (n -1) ; // repetitiv - rekursive Variante public static int fac ( int n) { return fac (n, 1); public static int fac ( int n, int x) { if (n == 0) { return x; else { return fac (n -1, n * x); Bieniusa Software Entwicklung 1 13/ 63
16 Zur Terminierung von rekursiven Funktionen fac(3) fac(2) fac(1) fac(0) Bieniusa Software Entwicklung 1 14/ 63
17 Zur Terminierung von rekursiven Funktionen fac(3) fac(2) fac(1) fac(0) fac(-2) fac(-3) fac(-4) fac(-5)... Bieniusa Software Entwicklung 1 14/ 63
18 Terminierungsbeweise I Idee: Messe den Abstand zum Basisfall! Sei f eine rekursive Prozedur, die durch eine Implementierung folgender Art gegeben ist: public static t f(t 1 x 1,..., t k x k ) {... f(e 1,..., e k )... Schema: 1 Man definiert mit einer Vorbedingung, welche Parameter erlaubt sind. Für diese gültigen Parameter soll die Prozedur terminieren. 2 Wir zeigen, dass der gültige Parameterbereich nicht verlassen wird. Das heißt, für jeden rekursiven Aufruf begründen wir, warum die neuen Parameter die Vorbedingung erfüllen. Bieniusa Software Entwicklung 1 15/ 63
19 Terminierungsbeweise II 3 Wir definieren eine Abstiegsfunktion h, welche den Abstand der Parameterwerte zu einem Basisfall misst. Dazu muss h jeder gültigen Kombination von Parameterwerten eine natürliche Zahl (N 0 ) zuweisen. D.h. für die Prozedur f oben ist h eine Funktion h : t 1 t k N 0. 4 Wir begründen, warum der Wert von h bei jedem rekursiven Aufruf für die neuen Parameterwerte echt kleiner ist als für die Parameterwerte des aktuellen Aufrufs, also: h(x 1,..., x k ) > h(e 1,..., e k ) Bieniusa Software Entwicklung 1 16/ 63
20 Da in N 0 jede echt absteigende Kette endlich ist, ist eine unendliche Folge von rekursiven Aufrufen durch die Voraussetzungen ausgeschlossen. Wenn andere Ursachen zur Nichtterminierung (zum Beispiel Schleifen) ausgeschlossen werden können, dann ist damit die Terminierung der rekursiven Prozedur gezeigt. Bieniusa Software Entwicklung 1 17/ 63
21 Beispiel: Fakultät 1 public static int fac ( int n) { 2 if (n == 0) { 3 return 1; 4 else { 5 return n * fac (n -1) ; Die Prozedur fac terminiert für positive Eingabewerte. Wie geben also die Vorbedingung requires n >= 0 an. 2 Im rekursiven Aufruf in Zeile 5 wissen wir wegen der if-anweisung, dass n!= 0 und daher gilt n > 0. Also ist n-1 >= 0 und die Vorbedingung gilt. 3 Wir wählen h(n) = n als Abstiegsfunktion. Da n >= 0 für gültige Parameter gilt, bildet h die Parameter nach N 0 ab. 4 Für den rekursiven Aufruf in Zeile 5 ist zu zeigen: h(n) > h(n 1) Dies gilt offensichtlich: h(n) = n > n 1 = h(n 1) Bieniusa Software Entwicklung 1 18/ 63
22 Beispiel: ggt I 1 // groesster gemeinsamer Teiler von m und n 2 public static int ggt ( int m, int n) { 3 if (m == n) { 4 return m; 5 else if (m > n) { 6 return ggt (m-n, n); 7 else { 8 return ggt (m, n- m); Vorbedingung: requires m > 0 && n > 0 2 Vorbedingung gilt für die rekursiven Aufrufen: 1 Aufruf in Zeile 5: m > n, also ist m-n > 0. 2 Aufruf in Zeile 7: Es gilt weder m == n, noch m > n. Also gilt n > m und damit ist n-m > 0. Bieniusa Software Entwicklung 1 19/ 63
23 Beispiel: ggt II 3 Abstiegsfunktion: h(m, n) = m + n > 0 für m, n > 0 4 Die Abstiegsfunktion wird für rekursive Aufrufe echt kleiner: 1 Aufruf in Zeile 5: h(m, n) = m + n 2 Aufruf in Zeile 7: h(m, n) = m + n weil n>0 > m = m n + n = h(m n, n) weil m>0 > n = m + n m = h(m, n m) Bieniusa Software Entwicklung 1 20/ 63
24 Verallgemeinerung der Abstiegsfunktion Bisher: Abstiegsfunktion bildet nach N 0 ab Neben den natürlichen Zahlen mit der Ordnung < gibt es noch andere (partiell) geordnete Mengen, in denen es keine unendlichen absteigenden Ketten gibt. Bieniusa Software Entwicklung 1 21/ 63
25 Definition: Ordnung I Eine Teilmenge R von M N heißt eine (binäre) Relation. Gilt M = N, dann nennt man R homogen. Eine homogene Relation heißt: reflexiv, wenn für alle x M gilt: (x, x) R antisymmetrisch, wenn für alle x, y M gilt: wenn (x, y) R und (y, x) R, dann x = y transitiv, wenn für alle x, y, z M gilt: wenn (x, y) R und (y, z) R, dann (x, z) R Eine reflexive, antisymmetrische und transitive homogene Relation auf M M heißt eine partielle Ordnungsrelation. Bieniusa Software Entwicklung 1 22/ 63
26 Definition: Ordnung II Eine Menge M mit einer Ordnungsrelation R heißt eine partielle Ordnung. Meist benutzt man Infixoperatoren wie (oder ) zur Darstellung der Relation und schreibt und x y statt (x, y) R x < y statt x y und x y Bieniusa Software Entwicklung 1 23/ 63
27 Definition: Kette Sei (M, ) eine partielle Ordnung. Eine Folge x 0, x 1, x 2,... heißt eine absteigende Kette, wenn überall x i x i+1 gilt. Falls sogar überall x i > x i+1 gilt, dann nennt man die Kette echt absteigend. Eine noethersche Ordnung ist eine partielle Ordnung, die keine unendlichen echt absteigenden Ketten enthält. Bieniusa Software Entwicklung 1 24/ 63
28 Beispiel: Lexikographische Ordnung auf Zahlenpaaren (x 1, y 1 ) lex (x 2, y 2 ) genau dann, wenn x 1 < x 2 oder (x 1 = x 2 und y 1 y 2 ) Vergleiche zuerst die erste Komponente; bei Gleichheit der ersten Komponente entscheidet die zweite Komponente über die Ordnung der Zahlenpaare. Beispiel: (1, 42) lex (2, 0) und (3, 7) lex (3, 9), aber (2, 1) lex (1, 100). Die lexikographische Ordnung auf N 0 N 0 ist noethersch. Bieniusa Software Entwicklung 1 25/ 63
29 Beispiel: Ackermann-Funktion I 1 static long ackermann ( long m, long n) { 2 if (m == 0) { 3 return n + 1; 4 else if (n == 0) { 5 return ackermann ( m - 1, 1); 6 7 return ackermann ( m - 1, ackermann (m, n - 1)); 8 In jedem rekursiven Aufruf wird entweder der erste Parameter kleiner oder der erste Parameter bleibt unverändert und der zweite wird kleiner. Bieniusa Software Entwicklung 1 26/ 63
30 Beispiel: Ackermann-Funktion II 1 Vorbedingung: requires m >= 0 && n >= 0 2 Vorbedingung für rekursive Aufrufe ist erfüllt. Aufruf in Zeile 5: m 1 0, weil m 0 und m 0 gilt. Äußerer Aufruf in Zeile 7: m 1 0; außerdem ist der Rückgabewert der ackermann-funktion immer mindestens 1. Innerer Aufruf in Zeile 7: n 1 0, weil n 0 nach if-bedingung. 3 Abstiegsfunktion: h(m, n) = (m, n) mit noethersche Ordnung (N N, lex ). 4 Für die rekursiven Aufrufe gilt dann: 1 Aufruf in Zeile 5: h(m 1, 1) = (m 1, 1) < lex (m, 0) = (m, n) = h(m, n) 2 Äußerer Aufruf in Zeile 7: h(m 1, a(m, n 1)) = (m 1, a(m, n 1)) < lex (m, n) = h(m, n) 3 Innerer Aufruf in Zeile 7: h(m, n 1) = (m, n 1) < lex (m, n) = h(m, n) Bieniusa Software Entwicklung 1 27/ 63
31 Rekursion vs. Iteration Für jede Methode, die ein Problem mit Hilfe von Rekursion löst, kann eine Alternativimplementierung gefunden werden, die das gleiche Problem iterativ, d.h. mit Schleifenkonstrukten löst. // rekursive Variante public static int fac ( int n) { if (n == 0) { return 1; else { return n * fac (n -1) ; // iterative Variante public static int fac ( int n) { int result = 1; int i = n; while (i!= 0) { result = i * result ; i - -; return result ; Bieniusa Software Entwicklung 1 28/ 63
32 Warum Rekursion? Oft einfacherer und eleganterer Code, wenn man Probleme auf rekursiven Datenstrukturen löst Manche Programmiersprachen (z.b. Haskell, Ocaml, Erlang etc.) bieten keine Sprachmittel für Schleifen an. Programmierer müssen daher beide Varianten verstehen und anwenden können! Terminierungsbeweise sind bei der Entwicklung von Qualitätssoftware sehr wichtig, und zwar unabhängig vom verwendeten Modellierungsbzw. Programmierparadigma. Es sollte zur Routine der Softwareentwicklung gehören, den zulässigen Parameterbereich festzulegen und dafür Terminierung zu zeigen. Bieniusa Software Entwicklung 1 29/ 63
Kapitel 08: Rekursion und Terminierung Software Entwicklung 1
Kapitel 08: Rekursion und Terminierung Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Rekursion ist eine elegante Strategie zur Problemlösung, die es erlaubt eine Problemstellung
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.
Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Rekursion Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 27 Motivation Beispiel: Fibonacci-Folge
Beispiele: 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
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
Software Entwicklung 1
Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Lernziele Die Definition wichtiger Begriffe im Zusammenhand mit Bäumen zu kennen. Markierte Bäumen, insbesondere Suchbäume,
Definition: (Kette, noethersche Ordnung)
3. Funktionales Programmieren 3.4 Semantik, Testen und Verifikation Definition: (Kette, noethersche Ordnung) Sei (M, ) eine Ordnung. Eine Folge ϕ : N M heißt eine (abzählbar unendliche) aufsteigende Kette,
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
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
Kapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration
Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Inhalt Rekursion: Technik Prof. Dr. Günter Rudolph Fakultät
Logik für Informatiker
Vorlesung Logik für Informatiker 2. Induktion Bernhard Beckert Universität Koblenz-Landau Sommersemester 2006 Logik für Informatiker, SS 06 p.1 Induktion Zentrale Rolle Wesentliches Beweisprinzip in Mathematik
Stack. Seniorenseminar Michael Pohlig
Stack Seniorenseminar 21.06.2013 Michael Pohlig ([email protected]) Übersicht 1. Axiomatik eins Kellers und seine Software- Realisierung 2. Bedeutung der Rekursion in der Mathematik 3. Rekursive Programmierung.
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
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
9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion
Experiment: Die Türme von Hanoi. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration Links Mitte Rechts Mathematische Rekursion Viele mathematische Funktionen
Einführung in die Programmierung
: Inhalt Einführung in die Programmierung Wintersemester 2009/0 : Technik vs. Iteration Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund 2 Definition (einfache,
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
( )= 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
Rekursive Funktionen
Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?
Programmieren lernen mit Groovy Rekursion Rekursion und Iteration
Programmieren lernen mit Groovy Rekursion Seite 1 Rekursion Rekursion Ursprung lat. recurrere ~ zurücklaufen rekursive Definition Definition mit Bezug auf sich selbst Beispiel Fakultätsfunktion n! 0! =
Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems
4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um
To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1
To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1 Rekursion: Beispiele Bier trinken 8-Damen-Problem ipod Shuffle für alle Mitarbeiter Karten
Rekursive Funktionen
Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?
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 -
Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems
4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um
Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 2. Februar 2017 Hinweise: Klausurtermine: Programmieren I Übungsklausur Programmieren I: 13. März
Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die
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
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
Lösungshinweise/-vorschläge zum Übungsblatt 5: Software-Entwicklung 1 (WS 2017/18)
Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 5: Software-Entwicklung 1 (WS 2017/18)
Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die
Datenstrukturen und Algorithmen
Datenstrukturen und Algorithmen VO 708.031 [email protected] 1 Kapitel 2 Algorithmische [email protected] 2 2. Algorithmische 1) Iterative Algorithmen 2) Rekursive Algorithmen
1 Algorithmische Grundlagen
1 Algorithmische Grundlagen Klocke/17.03.2003 1.1 1.1 Begriffsklärung Fragen Begriffsklärungen Abstraktionsebenen für Algorithmen und Datenstrukturen Algorithmus Qualität von Algorithmen Klocke/17.03.2003
Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte)
Matrikelnummer: 1 Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte) Kreuzen Sie an, ob die folgenden Aussagen richtig oder falsch sind. Bewertung: keine Antwort: 0 Punkte richtige Antwort: +0.5 Punkte falsche
Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung
Dr. Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung WS18/19 https://www.sosy-lab.org/teaching/2018-ws-infoeinf/ Divide et Impera im Römischen
Die Schnittstelle Comparable
Die Schnittstelle Comparable Wir wollen Such- und Sortieroperationen für beliebige Objekte definieren. Dazu verwenden wir die vordefinierte Schnittstelle Comparable: public interface Comparable { int compareto(object
Komplexität von Algorithmen
Komplexität von Algorithmen Prof. Dr. Christian Böhm WS 07/08 in Zusammenarbeit mit Gefei Zhang http://www.dbs.informatik.uni-muenchen.de/lehre/nfinfosw Ressourcenbedarf - Größenordnungen Prozesse verbrauchen
12. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Lernziele. Mathematische Rekursion. Rekursion in Java: Genauso! n! =
Lernziele Sie verstehen, wie eine Lösung eines rekursives Problems in Java umgesetzt werden kann. Sie wissen, wie Methoden in einem Aufrufstapel abgearbeitet werden. 12. Rekursion Mathematische Rekursion,
Ü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
Rekursion und Iteration
Rekursion und Iteration Programmieren in Derive Aline Rumöller Rekursion und Iteration Programmieren in Derive IF-Anweisungen in Derive Rekursion Vektorfunktionen in Derive Schleifen in Derive Iteration
Ü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
12. Rekursion Grundlagen der Programmierung 1 (Java)
12. Rekursion Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 24. Januar 2006 Einordnung im Kontext der Vorlesung
FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt
Inhalt 1. Einführung 1. Beispiel: Fakultät 2. Beispiel: Zahlenfolge 3. Beispiel: Formale Sprache 4. Unterschied Iteration/Rekursion 2. Rekursive Methoden 1. Beispiel: Fakultät 2. Beispiel: "Türme
Grundlagen der Programmierung
Grundlagen der Programmierung Algorithmen und Datenstrukturen Die Inhalte der Vorlesung wurden primär auf Basis der angegebenen Literatur erstellt. Darüber hinaus sind ausgewählte Teile in Anlehnung an
4. Fortgeschrittene Algorithmen 4.1 Rekursion 4.2 Daten und Datenstrukturen 4.3 Bäume
4. Fortgeschrittene Algorithmen 4.1 Rekursion 4.2 Daten und Datenstrukturen 4.3 Bäume 4.1-1 4.1 Rekursion Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines
Rekursive Funktionen (1)
Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: n i n! = i=1 für n > 0 1 für
11. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Mathematische Rekursion. Rekursion in Java: Genauso! Unendliche Rekursion. n!
Mathematische Rekursion 11. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration, Lindenmayer Systeme Viele mathematische Funktionen sind sehr natürlich
Rekursive Funktionen (1)
Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: nn ii nn! = ii=1 für nn > 0
Algorithmen und Datenstrukturen Tafelübung 4. Jens Wetzl 15. November 2011
Algorithmen und Datenstrukturen Tafelübung 4 Jens Wetzl 15. November 2011 Folien Keine Garantie für Vollständigkeit und/oder Richtigkeit Keine offizielle Informationsquelle LS2-Webseite Abrufbar unter:
2. Algorithmenbegriff
2. Algorithmenbegriff Keine Algorithmen: Anleitungen, Kochrezepte, Wegbeschreibungen,... Algorithmus: Berechnungsvorschrift, die angibt, wie durch Ausführung bestimmter Elementaroperationen aus Eingabegrößen
public class Test extends MiniJava { public static void main (String [] args) { write(args[0]+args[1]); } } // end of class Test
Manche Funktionen, deren Ergebnistyp void ist, geben gar keine Werte zurück im Beispiel: write() und main(). Diese Funktionen heißen Prozeduren. Das Hauptprogramm hat immer als Parameter ein Feld args
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
Algorithmen und Datenstrukturen
Technische Universität München SoSe 2017 Fakultät für Informatik, I-16 Lösungsblatt 4 Dr. Stefanie Demirci 31. Mai 2017 Rüdiger Göbl, Mai Bui Algorithmen und Datenstrukturen Aufgabe 1 Komplexität Berechnung
Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. Januar 2018 Hinweise: Klausurtermine: Programmieren I Übungsklausur Programmieren I: 17. Februar
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
Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung
Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"
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
Algorithmen und Datenstrukturen 04
15. November 2011 1 Besprechung Blatt 3 Hinweise 2 Induktion Allgemeines Beispiele 3 Rekursion Allgemeines Lineare Rekursion und Endrekursion Entrekursivierung Weitere Rekursionstypen 4 Backtracking 5
JAVA - Rekursion
Übungen Informatik I JAVA - http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 Folie 1 Inhalt Allgemeines Fakultät Fibonacci Türme von Hanoi Übungen Informatik 1 Folie 2 Ein Objekt
Elementare Konzepte von
Elementare Konzepte von Programmiersprachen Teil 2: Anweisungen (Statements) Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Anweisungen (statements) in Java Berechnung (expression statement)
5.3 Korrektheit und Verifikation
5.3 Korrektheit und Verifikation Korrektheit bedeutet, dass ein Algorithmus oder ein Programm das in der Spezifikation beschriebene Problem für beliebige Eingabedaten korrekt löst. Die Korrektheit kann
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)
Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl
Ordnungsrelationen auf Mengen. Beispiel einer Ordnungsrelation. Spezielle Elemente von Ordnungen. Spezielle Elemente von Ordnungen
Ordnungsrelationen auf Mengen! Eine (partielle) Ordnungsrelation oder kurz Ordnung O auf einer Menge M ist eine Relation, die reflexiv, antisymmetrisch und transitiv ist. Beispiel: M = { 1, 2, 3 }, O =
Ordnungsrelationen auf Mengen
Ordnungsrelationen auf Mengen Eine (partielle) Ordnungsrelation oder kurz Ordnung O auf einer Menge M ist eine Relation, die reflexiv, antisymmetrisch und transitiv ist. Beispiel: M = { 1, 2, 3 }, O =
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
Einführung in die Informatik I
Einführung in die Informatik I LOOP Programme, rekursive Funktionen und der Turm von Hanoi Prof. Dr. Nikolaus Wulff Berechenbarkeit Mitte des 20. Jahrhunderts beantworteten Pioniere, wie Alan M. Turing
Abschnitt 11: Korrektheit von imperativen Programmen
Abschnitt 11: Korrektheit von imperativen Programmen 11. Korrektheit von imperativen Programmen 11.1 11.2Testen der Korrektheit in Java Peer Kröger (LMU München) in die Programmierung WS 16/17 931 / 961
Lö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
2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017
2. Algorithmische Methoden 2.1 Rekursion 18. April 2017 Rekursiver Algorithmus Ein rekursiver Algorithmus löst ein Problem, indem er eine oder mehrere kleinere Instanzen des gleichen Problems löst. Beispiel
Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?
Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2015 1 Einführung Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München 2 Grundlagen von Algorithmen
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 [email protected] Sprechstunde: Freitag,
Vorkurs Informatik WiSe 16/17
Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 11.10.2016 Technische Universität Braunschweig, IPS Überblick Einleitung Beispiele 11.10.2016 Dr. Werner Struckmann / Stephan Mielke,
Algorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2016 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Programm heute 1 Einführung 2 Grundlagen von Algorithmen
III.1 Prinzipien der funktionalen Programmierung - 1 -
1. Prinzipien der funktionalen Programmierung 2. Deklarationen 3. Ausdrücke 4. Muster (Patterns) 5. Typen und Datenstrukturen 6. Funktionale Programmiertechniken III.1 Prinzipien der funktionalen Programmierung
13. Bäume: effektives Suchen und Sortieren
13. Bäume: effektives Suchen und Sortieren Java-Beispiele: Baum.java Traverse.java TraverseTest.java Version: 25. Jan. 2016 Schwerpunkte Aufgabe und Vorteile von Bäumen Sortieren mit Bäumen Ausgabealgorithmen:
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
