rekursion + iteration. manchmal ist es sinnvoll auf schon erschafftes zurückzugreifen, wie z.b. auf...
TRANSCRIPT
![Page 1: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/1.jpg)
REKURSION + ITERATION
![Page 2: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/2.jpg)
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
![Page 3: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/3.jpg)
Aus dem alten Menschheitswissen einer
Generation aufbauend wird das neue
Menschheitswissen erzeugt.Das geschah immer wieder bis zur heutigen Generation.
![Page 4: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/4.jpg)
Mathematisch könnte man dies wie folgt modellieren:
![Page 5: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/5.jpg)
Es beginnt mit dem "Urknall" (= leere Menge).
Daraus wird dann (nach einer bestimmten Regel)
eine neue Menge konstruiert (produziert):Die Menge der Atome.
![Page 6: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/6.jpg)
Aus dieser wird dann wieder (nach einer
bestimmten Regel) eine neue Menge konstruiert
(produziert): Die Menge der Moleküle,
usw.
![Page 7: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/7.jpg)
Die Vereinigung all dieser Mengen ergibt dann die
Gesamtmenge. Man sagt: Diese Gesamtmenge wurde induktiv definiert (induktive
Definition)
![Page 8: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/8.jpg)
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.
![Page 9: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/9.jpg)
Dieses Verfahren nennt man Iteration (iterativ)
(lateinisch iterare = wiederholen)
![Page 10: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/10.jpg)
Beispiel:
![Page 11: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/11.jpg)
Definition:
n! = n * (n-1) * (n-2) * ... * 1
Zu dem Ausrufezeichen sagt man Fakultät
![Page 12: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/12.jpg)
Was ist dann 5 Fakultät?
5! = 5 * 4 * 3 * 2 * 1=120
![Page 13: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/13.jpg)
Die Fakultät kann man mit Hilfe von Regeln
berechnen.
![Page 14: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/14.jpg)
---1
n ----------n*(n+1)
Regel R1: Die leere Menge produziert die Zahl 1bzw. 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)
![Page 15: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/15.jpg)
Mit der leeren Menge beginnt alles
Aus dieser wird dann (mit Hilfe von R1) eine neue
gebastelt.
Aus dieser wird dann (mit Hilfe von R1) wieder eine
neue gebastelt.
3*2*1
Die Vereinigung all dieser Mengen ist die zu konstruierende Gesamtmenge.
1
2*1
Aus dieser wird dann (mit Hilfe von R1) wieder eine
neue gebastelt, usw.…
![Page 16: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/16.jpg)
Aufgabe:Erstellen Sie die Funktion fak (Parameter, Rückgabe bitte selbst überlegen), die
die Fakultät einer Zahl berechnet.
![Page 17: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/17.jpg)
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
![Page 18: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/18.jpg)
Weitere Lösung:
![Page 19: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/19.jpg)
Angenommen, jemand hätte schon fak(n-1) berechnet. Wie kann man mit Hilfe
von fak(n-1) den Wert von fak(n) berechnen?
![Page 20: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/20.jpg)
fak(n) = fak(n-1) * n
![Page 21: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/21.jpg)
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.
![Page 22: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/22.jpg)
int fakRek(int zahl){ int prod; prod=fakRek(zahl-1)*zahl; return prod;}
![Page 23: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/23.jpg)
Dieses Verfahren nennt man Rekursion (lat.
recurrere = zurücklaufen)
![Page 24: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/24.jpg)
Konkret:Was passiert beim Aufruf
von fakRek(3)
![Page 25: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/25.jpg)
fakRek(3)
int prod; prod=fakRek(zahl-1)*zahl; return prod;}
zahl=3(Kopie)
3 3
2
Bevor die Anweisung return prod;gemacht werden kann, muss zuerst fakRek(2) abgearbeitet werden!
![Page 26: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/26.jpg)
Zusammengefasst:
![Page 27: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/27.jpg)
fakRek(3)prod=fakRek(2)*3;return prod;
prod=fakRek(1)*2;return prod;
prod=fakRek(0)*1;return prod;
prod=fakRek(-1)*0;return prod;
Das Programm ist in einer
Endlosschleife!
...
![Page 28: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/28.jpg)
Wie muss also unser Programm noch abgeändert
werden, damit es funktioniert?
![Page 29: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/29.jpg)
int fakRek(int zahl){ int prod; if(zahl==1){ prod=1; }else{ prod=fakRek(zahl-1)*zahl;}return prod;
}
![Page 30: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/30.jpg)
Konkret:Was passiert beim Aufruf
von fakRek(3)
![Page 31: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/31.jpg)
fakRek(3)
prod=fakRek(2)*3;return prod;
prod=fakRek(1)*2;return prod;
prod=1;return prod; 1
2
6
6
2
1
![Page 32: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/32.jpg)
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?
![Page 33: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/33.jpg)
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 .
![Page 34: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/34.jpg)
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.
![Page 35: REKURSION + ITERATION. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte](https://reader036.vdokument.com/reader036/viewer/2022070310/55204d6549795902118bac80/html5/thumbnails/35.jpg)
Aufgabe:1) Implementieren Sie die FunktionfibIt(...) iterativ.
2) Implementieren Sie die FunktionfibRek(...) rekursiv.