REKURSION + ITERATION.

Slides:



Advertisements
Ähnliche Präsentationen
Asymptotische Notation
Advertisements

Kapitel 3 Arithmetische Schaltkreise
Vom graphischen Differenzieren
Fourier-Faltungs Formalismus
der Universität Oldenburg
Einige entscheidbare bzw. rekursiv aufzählbare Sprachen
Parser für CH3-Sprachen
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
FOR Anweisung.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Kapitel 5 Stetigkeit.
St. Wiedemann Praktische Anwendung – Abfragen erstellen.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Problemstellung Berechne die Summe der Quadrate aller natürlichen Zahlen bis zu einer vorgegebenen Zahl (bspw. 100)! Oder mathematisch: Berechne.
(Ron Rivest, Adi Shamit, Leonard Adleman , 1977)
Zählen, ohne zu zählen.
Vortrag: Ingo Gensch, Mathias Reich am:
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
Quaternionen Eugenia Schwamberger.
Rekursion Richard Göbel.
Fuzzy Logic and Rough Sets Jens Grabarske, Gunter Labes
Machine Learning Was wir alles nicht behandelt haben.
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Programmierung
Drehmoment und Hebelgesetz
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Die Zählschleife int s = 0 for (int k=1; k
Einführung in die Programmiersprache C 4
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Wahrscheinlichkeitsrechnung
2.4 Rekursion Klassifikation und Beispiele
DAS HERON-VERFAHREN Heron erkannte, dass man die Quadratwurzel einer Zahl bestimmen kann, indem man verschiedene Mittelwerte berechnet. Solche Nährerungsverfahren.
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Das Heronverfahren arithmetisches Mittel geometrisches Mittel
1, 2, 3, ... Natürliche Zahlen PaedDr. Ján Gunčaga, PhD. Lehrstuhl für Mathematik und Physik Pädagogische Fakultät Katholische Universität.
Algorithmen und Datenstrukturen Übungsmodul 8
LK-MA - Christopher Schlesiger
ENDLICHE KÖRPER RSA – VERFAHREN.
Leere Menge, Teilmenge, N, Z
Programmiervorkurs WS 2014/15 Methoden
SFZ FN Sj. 13/14 Python 3 Rekursion Inf K1/2 Sj 13/14
Stetige Kleinste-Quadrate-Approximation
Informatik Formale Sprachen 1.2 Grammatiken formaler Sprachen
Entwicklung eines Atommodells
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Rekursion-
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Unterprogramme / Methoden
Rechnen mit Funktionen dadurch wird Excel professionell...
Vorstellen und Herleiten der Horner Schemas
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
Dr. Wolfram Amme, Semantik funktionaler Programme, Informatik II, FSU Jena, SS Semantik funktionaler Programme.
J. Nürnberger2007 / 081 Tabellenkalkulation (3) Arbeiten mit Formeln am Beispiel von OpenOffice.org Calc.
2.4 Rekursion Klassifikation und Beispiele
Syntaxdiagramme.
REKURSION + ITERATION.
Nksainf.ch/oinf.
Einführung in die Programmierung
REKURSION + ITERATION.
Vorstellen und Herleiten der Horner Schemas
 Präsentation transkript:

REKURSION + ITERATION

Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte Menschheitswissen

Aus dem alten Menschheitswissen einer Generation aufbauend wird das neue Menschheitswissen erzeugt. Das geschah immer wieder bis zur heutigen Generation.

Mathematisch könnte man dies wie folgt modellieren:

Es beginnt mit dem "Urknall" (= leere Menge) Es beginnt mit dem "Urknall" (= leere Menge). Daraus wird dann (nach einer bestimmten Regel) eine neue Menge konstruiert (produziert): Die Menge der Atome.

Aus dieser wird dann wieder (nach einer bestimmten Regel) eine neue Menge konstruiert (produziert): Die Menge der Moleküle, usw.

Die Vereinigung all dieser Mengen ergibt dann die Gesamtmenge Die Vereinigung all dieser Mengen ergibt dann die Gesamtmenge. Man sagt: Diese Gesamtmenge wurde induktiv definiert (induktive Definition)

 … Mit der leeren Menge beginnt alles Aus dieser wird dann (mit Hilfe einer Regel) eine neue gebastelt. Aus dieser wird dann wieder (mit Hilfe einer Regel) eine neue gebastelt, usw.  Die Vereinigung all dieser Mengen ist die zu konstruierende Gesamtmenge. …

Dieses Verfahren nennt man Iteration (iterativ) (lateinisch iterare = wiederholen)

Beispiel:

Zu dem Ausrufezeichen sagt man Fakultät Definition: n! = n * (n-1) * (n-2) * ... * 1 Zu dem Ausrufezeichen sagt man Fakultät

Was ist dann 5 Fakultät? 5! = 5 * 4 * 3 * 2 * 1 =120

Die Fakultät kann man mit Hilfe von Regeln berechnen.

 --- 1 n ---------- n*(n+1)  --- 1 n ---------- n*(n+1) Regel R1: Die leere Menge produziert die Zahl 1 bzw. aus der leeren Menge folgt die Zahl 1 Regel R2: Die Zahl n produziert die Zahl n*(n+1) bzw. aus der Zahl n folgt die Zahl n*(n+1)

 1 2*1 3*2*1 … Mit der leeren Menge beginnt alles Aus dieser wird dann (mit Hilfe von R1) eine neue gebastelt. 1 Aus dieser wird dann (mit Hilfe von R1) wieder eine neue gebastelt. 2*1 3*2*1 Aus dieser wird dann (mit Hilfe von R1) wieder eine neue gebastelt, usw. … Die Vereinigung all dieser Mengen ist die zu konstruierende Gesamtmenge.

Aufgabe: Erstellen Sie die Funktion fak (Parameter, Rückgabe bitte selbst überlegen), die die Fakultät einer Zahl berechnet.

Aus dem alten Produkt wird das … int fak(int zahl){ int i; int produkt=1; for(i=1;i<=zahl;i++){ produkt = produkt*i; } return produkt; } Aus dem alten Produkt wird das … …neue Produkt

Weitere Lösung:

Angenommen, jemand hätte schon fak(n-1) berechnet Angenommen, jemand hätte schon fak(n-1) berechnet. Wie kann man mit Hilfe von fak(n-1) den Wert von fak(n) berechnen?

fak(n) = fak(n-1) n *

Aufgabe: Erstellen Sie die Funktion fakRek (int zahl), die die Fakultät einer Zahl berechnet und im Funktionskörper den in der letzten Folie erarbeiteten Zusammenhang verwendet.

int fakRek(int zahl){ int prod; prod=fakRek(zahl-1) int fakRek(int zahl){ int prod; prod=fakRek(zahl-1)*zahl; return prod; }

Dieses Verfahren nennt man Rekursion (lat. recurrere = zurücklaufen)

Was passiert beim Aufruf von Konkret: Was passiert beim Aufruf von fakRek(3)

fakRek(3) int prod; prod=fakRek(zahl-1)*zahl; return prod; } zahl=3 (Kopie) int prod; prod=fakRek(zahl-1)*zahl; return prod; } 3 3 2 Bevor die Anweisung return prod; gemacht werden kann, muss zuerst fakRek(2) abgearbeitet werden!

Zusammengefasst:

Das Programm ist in einer Endlosschleife! fakRek(3) Das Programm ist in einer Endlosschleife! prod=fakRek(2)*3; return prod; prod=fakRek(1)*2; return prod; prod=fakRek(0)*1; return prod; prod=fakRek(-1)*0; return prod; ...

Wie muss also unser Programm noch abgeändert werden, damit es funktioniert?

int fakRek(int zahl){ int prod; if(zahl==1){ prod=1; } else{ prod=fakRek(zahl-1)*zahl; } return prod; }

Was passiert beim Aufruf von Konkret: Was passiert beim Aufruf von fakRek(3)

prod=fakRek(2)*3; return prod; 6 fakRek(3) 2 prod=fakRek(2)*3; return prod; 6 1 prod=fakRek(1)*2; return prod; 2 prod=1; return prod; 1

Vorbereitung für eine Aufgabe: Ein Biologe hat die Entwicklung einer Hasenpopulation beobachtet. 1. Generation: 2 Hasen. 2. Generation: 4 Hasen. 3. Generation: 2+4 = 6 Hasen. 4. Generation: 4+6 = 10 Hasen. 5. Generation: 6+10=16 Hasen. ... Wie geht es allgemein weiter ? Wie berechnet man die Anzahl der Hasen?

Die Anzahl der Hasen berechnet sich also (ab der 3 Die Anzahl der Hasen berechnet sich also (ab der 3. Generation) aus der Summe der Anzahl der Hasen der letzten 2 Generationen. Diese Folge von Zahlen nennt man die sogenannte Fibonacci-Folge .

Die Fibonacci-Folge ist eine unendliche Folge von Zahlen (den Fibonacci-Zahlen), bei der sich die jeweils folgende Zahl durch Addition ihrer beiden vorherigen Zahlen ergibt. Benannt ist sie nach Leonardo Fibonacci, der damit 1202 das Wachstum einer Kaninchenpopulation beschrieb.

Aufgabe: 1) Implementieren Sie die Funktion fibIt(...) iterativ. 2) Implementieren Sie die Funktion fibRek(...) rekursiv.