Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

REKURSION + ITERATION.

Ähnliche Präsentationen


Präsentation zum Thema: "REKURSION + ITERATION."—  Präsentation transkript:

1 REKURSION + ITERATION

2 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

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

4 Mathematisch könnte man dies wie folgt modellieren:

5 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.

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

7 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)

8  … 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.

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

10 Beispiel:

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

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

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

14  --- 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)

15  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.

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

17 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

18 Weitere Lösung:

19 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?

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

21 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.

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

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

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

25 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!

26 Zusammengefasst:

27 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; ...

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

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

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

31 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

32 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?

33 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 .

34 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.

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


Herunterladen ppt "REKURSION + ITERATION."

Ähnliche Präsentationen


Google-Anzeigen