Informatik I: Einführung in die Programmierung

Ähnliche Dokumente
Programmieren lernen mit Groovy Rekursion Rekursion und Iteration

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren

Einführung in die Informatik I

Einschub: Anweisungen und Bedingungen für PAP und Struktogramme (1)

Komplexität von Algorithmen

Einführung in die Programmierung

II.3.1 Rekursive Algorithmen - 1 -

Speicher und Adressraum

Vorkurs Informatik WiSe 16/17

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

Rekursive Funktionen

To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1

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

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

Praktische Informatik I Der Imperative Kern Rekursive Funktionen

Lösungsvorschlag Serie 2 Rekursion

Programmierung in Python

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

Programmierkurs Python I

Informatik B von Adrian Neumann

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

Algorithmen und Datenstrukturen"

6 Speicherorganisation

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Rekursive Algorithmen

Theoretische Informatik SS 03 Übung 3

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Einführung in die Funktionale Programmierung mit Haskell

Erwin Grüner

Inhalt. 3. Spezielle Algorithmen

Kasparov versus Deep Blue. Till Tantau. Institut für Theoretische Informatik Universität zu Lübeck

12. Rekursion Grundlagen der Programmierung 1 (Java)

Einführung in die Informatik 1

Algorithmen & Programmierung. Rekursive Funktionen (1)

Elementare Konzepte von

JAVA - Rekursion

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

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

Programmiertechnik Methoden, Teil 2

Programmierung und Modellierung

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Rekursion

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Die Programmiersprache C Eine Einführung

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

Einstieg in die Informatik mit Java

3. rekursive Definition einer Folge

Programmierkurs Java

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Komplexität von Algorithmen

Scala kann auch faul sein

Dynamische Programmierung. Problemlösungsstrategie der Informatik

11. Rekursion, Komplexität von Algorithmen

Einführung in die Informatik I (autip)

Binärbäume: Beispiel

Übung zur Vorlesung Berechenbarkeit und Komplexität

2. Algorithmenbegriff

Grundlagen der Programmierung

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

3.6.4 Rekursive Funktionen

Effiziente Algorithmen

Prof. Dr. Margarita Esponda

Syntax von LOOP-Programmen

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Nachklausur Bitte in Druckschrift leserlich ausfüllen!

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

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

Einführung in die C++ Programmierung für Ingenieure

Beispiel 1: Fakultät

Rekursive Funktionen sind Funktionen, die sich auf sich selbst beziehen bzw. Funktion, die sich selbst aufrufen.

Beispiel: Fibonacci-Zahlen

Benutzerfunktionen Was ist eine Funktion, was ist eine Prozedur?

1.4 Die Ackermannfunktion

Java: Eine kurze Einführung an Beispielen

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Programmierung 1 - Repetitorium

Vorlesung Datenstrukturen

Reelle Zahlenfolgen, Einleitung Fibonacci Folge

Informatik I: Einführung in die Programmierung

Test-Driven Design: Ein einfaches Beispiel

Informatik I: Einführung in die Programmierung. Übungsblatt 3. Abgabe: Freitag, 15. November 2013, 18:00 Uhr

Theoretische Informatik II

3. Basiskonzepte von Java

Programmierung 2. Dynamische Programmierung. Sebastian Hack. Klaas Boesche. Sommersemester

Punktlokalisierung. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK

Vorlesung. Vollständige Induktion 1

Einführung in Python (2)

Javakurs für Anfänger

Programmieren in Haskell Programmiermethodik

Algorithmen und Datenstrukturen

Transkript:

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 Domain, Quelle Wikipedia 31. Oktober 2014 B. Nebel Info I 4 / 20

2 Rekursive Definition Fakultät in Einfache und Iteration Rekursive Definition Fakultät in Einfache und Iteration 31. Oktober 2014 B. Nebel Info I 6 / 20

als Definitionstechnik: Bei einer rekursiven Definition wird das zu Definierende unter Benutzung desselben (normalerweise in einer einfacheren Version) definiert. Beispiel Auf wie viele Arten kann man n Dinge sequentiell anordnen? Berechne, auf wie viele Arten man n 1 Dinge anordnen kann. Für jede dieser Anordnungen können wir das letzte Ding auf n Arten einfügen. D.h. wir können die n! wie folgt definieren: { 1, falls n = 0; n! = n (n 1)!, sonst. Berechne 4!: 4! = 4 3! = 4 3 2! = 4 3 2 1! = 4 3 2 1 0! = 4 3 2 1 1 = 24 Rekursive Definition Fakultät in Einfache und Iteration 31. Oktober 2014 B. Nebel Info I 7 / 20

in Wir können in Funktionsdefinitionen bisher undefinierte (z.b. die gerade zu definierende) Funktion benutzen: -Interpreter >>> def fak(n):... if n <= 1:... return 1... else:... return n*fak(n-1)... >>> fak(4) 24 >>> fak(50) 304140932017133780436126081660647688443776415689605 12000000000000 Rekursive Definition Fakultät in Einfache und Iteration 31. Oktober 2014 B. Nebel Info I 8 / 20

Rekursive Aufrufe Was passiert genau? Aufrufsequenz fak(4) wählt else-zweig und ruft auf: fak(3) wählt else-zweig und ruft auf: fak(2) wählt else-zweig und ruft auf: fak(1) wählt if-zweig und: fak(1) gibt 1 zurück fak(2) gibt (2 1) = 2 zurück fak(3) gibt (3 2) = 6 zurück fak(4) gibt (4 6) = 24 zurück Rekursive Definition Fakultät in Einfache und Iteration Visualisierung 31. Oktober 2014 B. Nebel Info I 9 / 20

Einfache und Iteration Die rekursive ist eine einfache. Solche en können einfach in Iterationen (while-schleife) umgewandelt werden: -Interpreter >>> def ifak(n):... result = 1... while n >= 1:... result = result * n... n -= 1... return result... Rekursive Definition Fakultät in Einfache und Iteration Visualisierung 31. Oktober 2014 B. Nebel Info I 10 / 20

3 Zahlen Zahlen 31. Oktober 2014 B. Nebel Info I 12 / 20

: Das Kanninchenproblem Manchmal sind kompliziertere Formen der notwendig, z.b. bei der Eingeführt von Leonardo da Pisa, genannt seinem Buch Liber abbaci (1202), das u.a. die arabischen Ziffern und den Bruchstrich in die westliche Welt einführten. Anzahl der Kannichen-Paare, die man erhält, wenn jedes Paar ab dem zweiten Monat ein weiteres Kannichen-Paar erzeugt (und kein Kannichen stirbt). Wir beginnen im Monat 0, in dem das erste Paar geboren wird: Monat vorhanden geboren gesamt 0. 0 1 1 1. 1 0 1 2. 1 1 2 3. 2 1 3 4. 3 2 5 31. Oktober 2014 B. Nebel Info I 13 / 20 Zahlen

Zahlen Die Zahlen werden normalerweise wie folgt definiert (und beschreiben damit die vorhandenen Kanninchen-Paare am Anfang des Monats): 0, falls n = 0; fib(n) = 1, falls n = 1; fib(n 1) + fib(n 2), sonst. Zahlen D.h. die beginnt mit 0 und nicht mit 1. Beachte: Hier gibt es zwei rekursive Verwendungen der Definition. Die Zahlen spielen in vielen anderen Kontexten eine wichtige Rolle (z.b. Goldener Schnitt). 31. Oktober 2014 B. Nebel Info I 14 / 20

Zahlen in Umsetzung in folgt direkt der mathematischen Definition: -Interpreter >>> def fib(n):... if n <= 1:... return n... else:... return fib(n-1) + fib(n-2)... >>> fib(35) 9227465 Zahlen 31. Oktober 2014 B. Nebel Info I 15 / 20

Rekursive Aufrufe Aufrufsequenz fib(3) wählt else-zweig und ruft auf: fib(2) wählt else-zweig und ruft auf: fib(1) wählt if-zweig und fib(1) gibt 1 zurück fib(2) ruft jetzt auf: fib(0) wählt if-zweig und fib(0) gibt 0 zurück fib(2) gibt 1 zurück fib(3) ruft jetzt auf: fib(1) wählt if-zweig und fib(1) gibt 1 zurück fib(3) gibt 2 zurück Zahlen Visualisierung 31. Oktober 2014 B. Nebel Info I 16 / 20

Komplexe : Verständnis und Laufzeit Es gibt komplexere Formen der : mehrfach, indirekt, durch Argumente. Es ist nicht ganz einfach, den Verlauf der Ausführung der fib-funktion nachzuvollziehen. Dies ist aber auch nicht notwendig! Es reicht aus, sich zu vergegenwärtigen, dass: falls die Funktion alles richtig macht für Argumente mit dem Wert < n, dann berechnet sie das Geforderte Prinzip der vollständigen Induktion Die mehrfachen rekursiven Aufrufe führen zu sehr hoher Laufzeit! Auch hier ist eine iterative Lösung (while-schleife) möglich. Zahlen 31. Oktober 2014 B. Nebel Info I 17 / 20

Iterative Lösung I Im Allgemeinen ist es schwierig, Mehrfachrekursion in Iteration umzuwandeln. Bei fib hilft die Beobachtung, dass man den Wert immer durch die Addition der letzten beiden Werte berechnen kann. Das geht auch bei 0 startend! Generiere die Werte aufsteigend, bis die Anzahl der erzeugten Werte den Parameter n erreicht. Zahlen 31. Oktober 2014 B. Nebel Info I 18 / 20

Iterative Lösung II -Interpreter >>> def ifib(n):... if n <= 1:... return n... a = 0... b = 1... i = 2... while i < n:... new = a + b... a = b... b = new... i += 1... return a + b Zahlen Visualisierung 31. Oktober 2014 B. Nebel Info I 19 / 20

Zusammenfassung ist eine bekannte Definitionstechnik aus der Mathematik. erlaubt es, bestimmte Funktion sehr kurz und elegant anzugeben. Dies ist nicht immer die effizienteste Form! Das ist aber abhängig von der Programmiersprache. Einfachrekursion kann meist einfach in Iteration umgewandelt werden. Mehrfachrekursion ist komplizierter. Es gibt noch komplexere Formen der. Interessant werden rekursive Funktionen bei rekursiven Datenstrukturen. Zahlen 31. Oktober 2014 B. Nebel Info I 20 / 20