Programmieren lernen mit Groovy Rekursion Rekursion und Iteration

Ähnliche Dokumente
Informatik I: Einführung in die Programmierung

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Rekursion und Iteration

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Imperative vs. Funktionale Programmierung

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Informatik Rechnerinterne Vorgänge: Programmstrukt. (Lsg.) Gierhardt

Ideen und Konzepte der Informatik

FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

Elementare Konzepte von

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Datenstruktur Baum und Rekursion Software Entwicklung 1

Großübung zu Einführung in die Programmierung

Programmieren lernen mit Groovy Kollektionen: Listen und Abbildungen

Software Entwicklung 1

Informatik für Schüler, Foliensatz 18 Rekursion

Programmierkurs Python I

Kapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

II.3.1 Rekursive Algorithmen - 1 -

Vorkurs Informatik WiSe 17/18

Theoretische Informatik SS 03 Übung 3

Speicher und Adressraum

Folgen und Funktionen in der Mathematik

Lösungsvorschlag Serie 2 Rekursion

Kontrollstrukturen -- Schleifen und Wiederholungen

Programmieren I. Kapitel 5. Kontrollfluss

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Erwin Grüner

Einführung in die Informatik 1

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Algorithmen und Datenstrukturen (für ET/IT)

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Einführung in die Programmierung für NF. Übung

C++ - Kontrollstrukturen Teil 2

Programmieren 1 C Überblick

Programmiervorkurs für die Numerik Teil 1/4

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Vorkurs Informatik WiSe 16/17

1. Teilklausur Gruppe A. Bitte in Druckschrift leserlich ausfüllen!

Effiziente Algorithmen 2

2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017

Typen von Programmiersprachen

Einführung in die Informatik I

Algorithmische Bioinformatik 1

Programmierung für Mathematik (HS13)

Kapitel 4. Kontrollstrukturen

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

C.3 Funktionen und Prozeduren

Algorithmen und Datenstrukturen SS Übungsblatt 1: Grundlagen

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

Erste Java-Programme (Scopes und Rekursion)

Einführung in die Programmierung

Kapitel 08: Rekursion und Terminierung Software Entwicklung 1

Kontrollstrukturen. Verzweigungen Einfache Mehrfache Wiederholungen Eine Sequenz durchlaufen Wiederhole bis Solange. Tue

Grundlagen der Informatik I (Studiengang Medieninformatik)

Klassenvariablen, Klassenmethoden

Informatik I: Einführung in die Programmierung

Teil 14: Rekursive Programmierung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

WS2018/ Oktober 2018

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

Übungspaket 22 Rekursive Funktionsaufrufe

WS2017/ Oktober 2017

5. Algorithmen. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

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

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 7. Entrekursivierung

Inhalt Kapitel 2: Rekursion

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

Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Programmiertechnik Übungen zu Klassen & -methoden

Tag 3 Repetitorium Informatik (Java)

Transkript:

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! = 1 n! = (n-1)! * n als Funktionsdefinition: fak(0) = 1 fak(n) = fak(n-1)*n Seite 2

Rekursion Rekursion indirekte rekursive Definition (indirekte Rekursion) Definition mit indirektem Bezug auf sich selbst Beispiel gerade / ungerade gerade(0) = true gerade(n) = ungerade(n-1) 0 ist gerade n ist gerade, wenn n-1 ungerade ist ungerade(0) = false ungerade(n) = gerade(n-1) 0 ist nicht ungerade n ist ungerade, wenn n-1 gerade ist Seite 3

Rekursive Funktionen Rekursion in Programmiersprachen Rekursion in Programmiersprachen Rekursion ab ~ 1960 von allen (relevanten) Programmiersprachen unterstützt Ab ~1970 als wichtige Kontrollstruktur allgemein anerkannt und eingesetzt. E.W. Dijkstra: Pinonier der Informatik. Entwickelte u.a. Verfahren zum Übersetzen u. Ausführen rekursiver Funktionen Rekursion in Java / Groovy Beispiel Fakultätsfunktion def fak() { if ( == 0) return 1 else return fak(-1)* Version mit bedingter Anweisung def fak() { return == 0? 1 : fak(-1)* Version mit bedingtem Ausdruck def fak() { == 0? 1 : fak(-1)* eine noch kürzere Version Seite 4

Rekursive Funktionen Beispiel Die Summation 1 bis n n sumbis(n) = i i=0 kann rekursiv definiert werden. Wie? Seite 5

Rekursive Funktionen Beispiel Die Summation 0 bis n n sumbis(n) = i i=0 kann rekursiv definiert werden. Wie? sumbis(0) = 0 sumbis(n) = sumbis(n-1)+n Übung Schreiben Sie eine rekursive Funktion zur Berechnung der Summation 0 n und testen Sie sie in einer Schleife mit den Zahlen 1 15. Nutzen Sie eine andere Version der Berechnung zur Prüfung der Ergebnisse. Seite 6

def sumbisiterativ(n) { def sum = 0 for ( i = 0; i <= n; i = i+1 ) { sum = sum + i return sum Algorithmen, die mit Schleifen statt Rekursion arbeiten, nennt man iterativ. def sumbisrekursiv(n) { n == 0? 0 : sumbisrekursiv(n-1)+n for ( i in 1..15 ) { println i + "\titerativ: "+ sumbisiterativ(i) println "\trekursiv: " + sumbisrekursiv(i) Seite 7 \t erzeugt ein Tab-Zeichen

Beispiel : Berechnung der Eponentionfunktion / rekursiv Eponentialfunktion e =1 2 /2! 3 / 3! Welche Beziehung besteht zwischen den Summengliedern: Kann ein Summenglied aus seinem Vorgänger berechnet werden? (Rekursion?) Seite 8

Beispiel : Berechnung der Eponentionfunktion / rekursiv Eponentialfunktion e =1 2 /2! 3 / 3! Welche Beziehung besteht zwischen den Summengliedern: Kann ein Summenglied aus seinem Vorgänger berechnet werden? (Rekursion?) Startwert=1 1 = / 2= 2 / 2 2 /2 / 3= 3 / 3! 3 / 3! / 4= 4 / 4! (rekursive) Funktion? Seite 9

Beispiel : Berechnung der Eponentionfunktion / rekursiv Eponentialfunktion e =1 2 /2! 3 / 3! Welche Beziehung besteht zwischen den Summengliedern: Kann ein Summenglied aus seinem Vorgänger berechnet werden? (Rekursion?) Startwert=1 1 = / 2= 2 / 2 2 /2 / 3= 3 / 3! 3 / 3! / 4= 4 / 4! s(, 0) = 1 s(, i) = s(, i-1) * /i Funktion zur rekursiven Berechnung des i-ten Summanden? Seite 10

Beispiel : Berechnung der Eponentionfunktion / rekursiv Eponentialfunktion e =1 2 /2! 3 / 3! Welche Beziehung besteht zwischen den Summengliedern: Kann ein Summenglied aus seinem Vorgänger berechnet werden? (Rekursion?) Startwert=1 1 = / 2 = 2 / 2 2 /2 / 3= 3 / 3! 3 / 3! / 4= 4 / 4! s(, 0) = 1 s(, i) = s(, i-1) * /i def s(,i) { i == 0? 1 : s(,i-1) * / i e-funktion? Seite 11

Beispiel : Berechnung der Eponentionfunktion / rekursiv Eponentialfunktion e =1 2 /2! 3 / 3! Welche Beziehung besteht zwischen den Summengliedern: def e() { def r = 0 for ( j in 0..20 ) r = r + s(1,j) return r Kann ein Summenglied aus seinem Vorgänger berechnet werden? (Rekursion?) Startwert=1 1 = / 2= 2 / 2 2 /2 / 3= 3 / 3! 3 / 3! / 4= 4 / 4! s(, 0) = 1 s(, i) = s(, i-1) * /i def s(,i) { i == 0? 1 : s(,i-1) * / i Seite 12

Beispiel : Berechnung der Eponentionfunktion / rekursiv Eponentialfunktion e =1 2 /2! 3 / 3! def s(,i) { i == 0? 1 : s(,i-1) * / i def e() { def e = 0 for ( j in 0..20 ) e = e + s(,j) return e println e(1) Seite 13

Beispiel : Berechnung der Eponentionfunktion / iterativ Eponentialfunktion e =1 2 /2! 3 / 3! Welche Beziehung besteht zwischen den Summengliedern: Kann ein Summenglied aus seinem Vorgänger berechnet werden? (Iteration?) Startwert=1 1 = / 2 = 2 / 2 2 /2 / 3= 3 / 3! 3 / 3! / 4= 4 / 4! i 0 1 2 3 4 s 1 */2 **/2*3 ***/2*3*4 Vorwärtsberechnung: Wertverlaufstabelle Funktion zur iterativen Berechnung des i-ten Summanden? Seite 14

Beispiel : Berechnung der Eponentionfunktion / iterativ Eponentialfunktion 2 3 e =1 /2! / 3! Welche Beziehung besteht zwischen den Summengliedern: Kann ein Summenglied aus seinem Vorgänger berechnet werden? (Iteration?) i 0 1 2 3 4 s def s(,j) { def s = 1 if (j == 0) return 1 for (i in 1..j) { s = s*/i return s oder auch def s(,j) { def s = 1 def i = 0 while (i < j) { i = i+1 s = s*/i return s 1 */2 **/2*3 ***/2*3*4 e-funktion? Seite 15

Beispiel : Berechnung der Eponentionfunktion / iterativ Eponentialfunktion e =1 2 /2! 3 / 3! def s(,j) { def s = 1 def i = 0 while (i < j) { i = i+1 s = s*/i return s def e() { def e = 0 for ( j in 0..20 ) e = e + s(,j) return e println e(1) Seite 16

Übung Berechnen Sie die Eponentialfunktion e =1 2 /2! 3 / 3! in einer (einzigen) Funktion, die nur eine Schleife verwendet Konstruieren Sie Schleife aus einer Wertverlaufstabelle, in der auch die Summe, d.h. der angestrebte Wert berechnet wird. i 0 1 2 3 4 s 1 */2 **/2*3 ***/2*3*4 e 1 1+??? Seite 17