Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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.

Ähnliche Präsentationen


Präsentation zum Thema: "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."—  Präsentation transkript:

1 REKURSION + ITERATION

2 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). 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. 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 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) 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 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. …

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

17 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. 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)*zahl; return prod; }

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

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

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

26 Zusammengefasst:

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

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 Konkret: Was passiert beim Aufruf von fakRek(3)

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

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. 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. Manchmal ist es sinnvoll auf schon Erschafftes zurückzugreifen, wie z.B. auf das im Lauf der Zeit durch Generationen vor uns angehäufte."

Ähnliche Präsentationen


Google-Anzeigen