53
Informatik I: Einführung in die Programmierung 7. Rekursion Albert-Ludwigs-Universität Freiburg Bernhard Nebel 31. Oktober 2014

Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Informatik I: Einführung in die Programmierung7. Rekursion

Albert-Ludwigs-Universität Freiburg

Bernhard Nebel31. Oktober 2014

Page 2: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-Folge

Rekursion verstehen

31. Oktober 2014 B. Nebel – Info I 2 / 20

Page 3: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-Folge

Rekursion verstehen

Um Rekursion zu verstehen, muss man zuerst einmalRekursion verstehen.

Abb. in Public Domain, Quelle Wikipedia

31. Oktober 2014 B. Nebel – Info I 4 / 20

Page 4: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-Folge

Rekursion verstehen

Um Rekursion zu verstehen, muss man zuerst einmalRekursion verstehen.

Abb. in Public Domain, Quelle Wikipedia

31. Oktober 2014 B. Nebel – Info I 4 / 20

Page 5: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Fakultätsfunktion

31. Oktober 2014 B. Nebel – Info I 5 / 20

Page 6: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursion als Definitionstechnik:Fakultätsfunktion

Bei einer rekursiven Definition wird das zu Definierendeunter Benutzung desselben (normalerweise in einereinfacheren Version) definiert.

Beispiel Fakultätsfunktion

Auf wie viele Arten kann man n Dinge sequentiellanordnen?Berechne, auf wie viele Arten man n−1 Dinge anordnenkann. Für jede dieser Anordnungen können wir das„letzte“ Ding auf n Arten einfügen.D.h. wir können die Fakultätsfunktion n! wie folgtdefinieren:

n! ={

1, fallsn = 0;n · (n−1)!, sonst.

Berechne 4!:4! = 4·3! = 4 ·3·2! = 4 ·3 ·2 ·1! = 4·3 ·2 ·1 ·0! = 4·3 ·2 ·1·1= 24

31. Oktober 2014 B. Nebel – Info I 7 / 20

Page 7: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursion als Definitionstechnik:Fakultätsfunktion

Bei einer rekursiven Definition wird das zu Definierendeunter Benutzung desselben (normalerweise in einereinfacheren Version) definiert.Beispiel Fakultätsfunktion

Auf wie viele Arten kann man n Dinge sequentiellanordnen?Berechne, auf wie viele Arten man n−1 Dinge anordnenkann. Für jede dieser Anordnungen können wir das„letzte“ Ding auf n Arten einfügen.D.h. wir können die Fakultätsfunktion n! wie folgtdefinieren:

n! ={

1, fallsn = 0;n · (n−1)!, sonst.

Berechne 4!:4! = 4·3! = 4 ·3·2! = 4 ·3 ·2 ·1! = 4·3 ·2 ·1 ·0! = 4·3 ·2 ·1·1= 24

31. Oktober 2014 B. Nebel – Info I 7 / 20

Page 8: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursion als Definitionstechnik:Fakultätsfunktion

Bei einer rekursiven Definition wird das zu Definierendeunter Benutzung desselben (normalerweise in einereinfacheren Version) definiert.Beispiel Fakultätsfunktion

Auf wie viele Arten kann man n Dinge sequentiellanordnen?

Berechne, auf wie viele Arten man n−1 Dinge anordnenkann. Für jede dieser Anordnungen können wir das„letzte“ Ding auf n Arten einfügen.D.h. wir können die Fakultätsfunktion n! wie folgtdefinieren:

n! ={

1, fallsn = 0;n · (n−1)!, sonst.

Berechne 4!:4! = 4·3! = 4 ·3·2! = 4 ·3 ·2 ·1! = 4·3 ·2 ·1 ·0! = 4·3 ·2 ·1·1= 24

31. Oktober 2014 B. Nebel – Info I 7 / 20

Page 9: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursion als Definitionstechnik:Fakultätsfunktion

Bei einer rekursiven Definition wird das zu Definierendeunter Benutzung desselben (normalerweise in einereinfacheren Version) definiert.Beispiel Fakultätsfunktion

Auf wie viele Arten kann man n Dinge sequentiellanordnen?Berechne, auf wie viele Arten man n−1 Dinge anordnenkann. Für jede dieser Anordnungen können wir das„letzte“ Ding auf n Arten einfügen.

D.h. wir können die Fakultätsfunktion n! wie folgtdefinieren:

n! ={

1, fallsn = 0;n · (n−1)!, sonst.

Berechne 4!:4! = 4·3! = 4 ·3·2! = 4 ·3 ·2 ·1! = 4·3 ·2 ·1 ·0! = 4·3 ·2 ·1·1= 24

31. Oktober 2014 B. Nebel – Info I 7 / 20

Page 10: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursion als Definitionstechnik:Fakultätsfunktion

Bei einer rekursiven Definition wird das zu Definierendeunter Benutzung desselben (normalerweise in einereinfacheren Version) definiert.Beispiel Fakultätsfunktion

Auf wie viele Arten kann man n Dinge sequentiellanordnen?Berechne, auf wie viele Arten man n−1 Dinge anordnenkann. Für jede dieser Anordnungen können wir das„letzte“ Ding auf n Arten einfügen.D.h. wir können die Fakultätsfunktion n! wie folgtdefinieren:

n! ={

1, fallsn = 0;n · (n−1)!, sonst.

Berechne 4!:4! = 4·3! = 4 ·3·2! = 4 ·3 ·2 ·1! = 4·3 ·2 ·1 ·0! = 4·3 ·2 ·1·1= 24

31. Oktober 2014 B. Nebel – Info I 7 / 20

Page 11: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursion als Definitionstechnik:Fakultätsfunktion

Bei einer rekursiven Definition wird das zu Definierendeunter Benutzung desselben (normalerweise in einereinfacheren Version) definiert.Beispiel Fakultätsfunktion

Auf wie viele Arten kann man n Dinge sequentiellanordnen?Berechne, auf wie viele Arten man n−1 Dinge anordnenkann. Für jede dieser Anordnungen können wir das„letzte“ Ding auf n Arten einfügen.D.h. wir können die Fakultätsfunktion n! wie folgtdefinieren:

n! ={

1, fallsn = 0;n · (n−1)!, sonst.

Berechne 4!:4! = 4·3! = 4 ·3·2! = 4 ·3 ·2 ·1! = 4·3 ·2 ·1 ·0! = 4·3 ·2 ·1·1= 24

31. Oktober 2014 B. Nebel – Info I 7 / 20

Page 12: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Fakultätsfunktion in Python

Wir können in Funktionsdefinitionen bisher undefinierte(z.B. die gerade zu definierende) Funktion benutzen:

Python-Interpreter>>> def fak(n):... if n <= 1:... return 1... else:... return n*fak(n-1)...>>> fak(4)

24>>> fak(50)30414093201713378043612608166064768844377641568960512000000000000

31. Oktober 2014 B. Nebel – Info I 8 / 20

Page 13: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Fakultätsfunktion in Python

Wir können in Funktionsdefinitionen bisher undefinierte(z.B. die gerade zu definierende) Funktion benutzen:

Python-Interpreter>>> def fak(n):... if n <= 1:... return 1... else:... return n*fak(n-1)...>>> fak(4)24

>>> fak(50)30414093201713378043612608166064768844377641568960512000000000000

31. Oktober 2014 B. Nebel – Info I 8 / 20

Page 14: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Fakultätsfunktion in Python

Wir können in Funktionsdefinitionen bisher undefinierte(z.B. die gerade zu definierende) Funktion benutzen:

Python-Interpreter>>> def fak(n):... if n <= 1:... return 1... else:... return n*fak(n-1)...>>> fak(4)24>>> fak(50)

30414093201713378043612608166064768844377641568960512000000000000

31. Oktober 2014 B. Nebel – Info I 8 / 20

Page 15: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Fakultätsfunktion in Python

Wir können in Funktionsdefinitionen bisher undefinierte(z.B. die gerade zu definierende) Funktion benutzen:

Python-Interpreter>>> def fak(n):... if n <= 1:... return 1... else:... return n*fak(n-1)...>>> fak(4)24>>> fak(50)30414093201713378043612608166064768844377641568960512000000000000

31. Oktober 2014 B. Nebel – Info I 8 / 20

Page 16: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursive Aufrufe

Was passiert genau?

Aufrufsequenz→ fak(4) wählt else-Zweig und ruft auf:

→ fak(3) wählt else-Zweig und ruft auf:→ fak(2) wählt else-Zweig und ruft auf:

→ fak(1) wählt if-Zweig und:← fak(1) gibt 1 zurück

← fak(2) gibt (2×1) = 2 zurück← fak(3) gibt (3×2) = 6 zurück

← fak(4) gibt (4×6) = 24 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 9 / 20

Page 17: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursive Aufrufe

Was passiert genau?

Aufrufsequenz→ fak(4) wählt else-Zweig und ruft auf:

→ fak(3) wählt else-Zweig und ruft auf:

→ fak(2) wählt else-Zweig und ruft auf:→ fak(1) wählt if-Zweig und:← fak(1) gibt 1 zurück

← fak(2) gibt (2×1) = 2 zurück← fak(3) gibt (3×2) = 6 zurück

← fak(4) gibt (4×6) = 24 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 9 / 20

Page 18: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursive Aufrufe

Was passiert genau?

Aufrufsequenz→ fak(4) wählt else-Zweig und ruft auf:

→ fak(3) wählt else-Zweig und ruft auf:→ fak(2) wählt else-Zweig und ruft auf:

→ fak(1) wählt if-Zweig und:← fak(1) gibt 1 zurück

← fak(2) gibt (2×1) = 2 zurück← fak(3) gibt (3×2) = 6 zurück

← fak(4) gibt (4×6) = 24 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 9 / 20

Page 19: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursive Aufrufe

Was passiert genau?

Aufrufsequenz→ fak(4) wählt else-Zweig und ruft auf:

→ fak(3) wählt else-Zweig und ruft auf:→ fak(2) wählt else-Zweig und ruft auf:

→ fak(1) wählt if-Zweig und:

← fak(1) gibt 1 zurück← fak(2) gibt (2×1) = 2 zurück

← fak(3) gibt (3×2) = 6 zurück← fak(4) gibt (4×6) = 24 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 9 / 20

Page 20: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursive Aufrufe

Was passiert genau?

Aufrufsequenz→ fak(4) wählt else-Zweig und ruft auf:

→ fak(3) wählt else-Zweig und ruft auf:→ fak(2) wählt else-Zweig und ruft auf:

→ fak(1) wählt if-Zweig und:← fak(1) gibt 1 zurück

← fak(2) gibt (2×1) = 2 zurück← fak(3) gibt (3×2) = 6 zurück

← fak(4) gibt (4×6) = 24 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 9 / 20

Page 21: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursive Aufrufe

Was passiert genau?

Aufrufsequenz→ fak(4) wählt else-Zweig und ruft auf:

→ fak(3) wählt else-Zweig und ruft auf:→ fak(2) wählt else-Zweig und ruft auf:

→ fak(1) wählt if-Zweig und:← fak(1) gibt 1 zurück

← fak(2) gibt (2×1) = 2 zurück

← fak(3) gibt (3×2) = 6 zurück← fak(4) gibt (4×6) = 24 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 9 / 20

Page 22: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursive Aufrufe

Was passiert genau?

Aufrufsequenz→ fak(4) wählt else-Zweig und ruft auf:

→ fak(3) wählt else-Zweig und ruft auf:→ fak(2) wählt else-Zweig und ruft auf:

→ fak(1) wählt if-Zweig und:← fak(1) gibt 1 zurück

← fak(2) gibt (2×1) = 2 zurück← fak(3) gibt (3×2) = 6 zurück

← fak(4) gibt (4×6) = 24 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 9 / 20

Page 23: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursive Aufrufe

Was passiert genau?

Aufrufsequenz→ fak(4) wählt else-Zweig und ruft auf:

→ fak(3) wählt else-Zweig und ruft auf:→ fak(2) wählt else-Zweig und ruft auf:

→ fak(1) wählt if-Zweig und:← fak(1) gibt 1 zurück

← fak(2) gibt (2×1) = 2 zurück← fak(3) gibt (3×2) = 6 zurück

← fak(4) gibt (4×6) = 24 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 9 / 20

Page 24: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Rekursive Aufrufe

Was passiert genau?

Aufrufsequenz→ fak(4) wählt else-Zweig und ruft auf:

→ fak(3) wählt else-Zweig und ruft auf:→ fak(2) wählt else-Zweig und ruft auf:

→ fak(1) wählt if-Zweig und:← fak(1) gibt 1 zurück

← fak(2) gibt (2×1) = 2 zurück← fak(3) gibt (3×2) = 6 zurück

← fak(4) gibt (4×6) = 24 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 9 / 20

Page 25: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Einfache Rekursion und Iteration

Die rekursive Definition der Fakultätsfunktion ist eineeinfache Rekursion.Solche Rekursionen können einfach in Iterationen(while-Schleife) umgewandelt werden:

Python-Interpreter>>> def ifak(n):... result = 1... while n >= 1:... result = result * n... n -= 1... return result...

Visualisierung

31. Oktober 2014 B. Nebel – Info I 10 / 20

Page 26: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Fibonacci-Folge

31. Oktober 2014 B. Nebel – Info I 11 / 20

Page 27: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Fibonacci-Folge: Das Kanninchenproblem

Manchmal sind kompliziertere Formen der Rekursionnotwendig, z.B. bei der Definition der Fibonacci-FolgeEingeführt von Leonardo da Pisa, genannt Fibonacci inseinem Buch Liber abbaci (1202), das u.a. die arabischenZiffern und den Bruchstrich in die westliche Welteinführten.Anzahl der Kannichen-Paare, die man erhält, wenn jedesPaar ab dem zweiten Monat ein weiteres Kannichen-Paarerzeugt (und kein Kannichen stirbt). Wir beginnen imMonat 0, in dem das erste Paar geboren wird:

Monat vorhanden geboren gesamt0. 0 1 1

1. 1 0 12. 1 1 23. 2 1 34. 3 2 5

31. Oktober 2014 B. Nebel – Info I 13 / 20

Page 28: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Fibonacci-Folge: Das Kanninchenproblem

Manchmal sind kompliziertere Formen der Rekursionnotwendig, z.B. bei der Definition der Fibonacci-FolgeEingeführt von Leonardo da Pisa, genannt Fibonacci inseinem Buch Liber abbaci (1202), das u.a. die arabischenZiffern und den Bruchstrich in die westliche Welteinführten.Anzahl der Kannichen-Paare, die man erhält, wenn jedesPaar ab dem zweiten Monat ein weiteres Kannichen-Paarerzeugt (und kein Kannichen stirbt). Wir beginnen imMonat 0, in dem das erste Paar geboren wird:

Monat vorhanden geboren gesamt0. 0 1 11. 1 0 1

2. 1 1 23. 2 1 34. 3 2 5

31. Oktober 2014 B. Nebel – Info I 13 / 20

Page 29: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Fibonacci-Folge: Das Kanninchenproblem

Manchmal sind kompliziertere Formen der Rekursionnotwendig, z.B. bei der Definition der Fibonacci-FolgeEingeführt von Leonardo da Pisa, genannt Fibonacci inseinem Buch Liber abbaci (1202), das u.a. die arabischenZiffern und den Bruchstrich in die westliche Welteinführten.Anzahl der Kannichen-Paare, die man erhält, wenn jedesPaar ab dem zweiten Monat ein weiteres Kannichen-Paarerzeugt (und kein Kannichen stirbt). Wir beginnen imMonat 0, in dem das erste Paar geboren wird:

Monat vorhanden geboren gesamt0. 0 1 11. 1 0 12. 1 1 2

3. 2 1 34. 3 2 5

31. Oktober 2014 B. Nebel – Info I 13 / 20

Page 30: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Fibonacci-Folge: Das Kanninchenproblem

Manchmal sind kompliziertere Formen der Rekursionnotwendig, z.B. bei der Definition der Fibonacci-FolgeEingeführt von Leonardo da Pisa, genannt Fibonacci inseinem Buch Liber abbaci (1202), das u.a. die arabischenZiffern und den Bruchstrich in die westliche Welteinführten.Anzahl der Kannichen-Paare, die man erhält, wenn jedesPaar ab dem zweiten Monat ein weiteres Kannichen-Paarerzeugt (und kein Kannichen stirbt). Wir beginnen imMonat 0, in dem das erste Paar geboren wird:

Monat vorhanden geboren gesamt0. 0 1 11. 1 0 12. 1 1 23. 2 1 3

4. 3 2 5

31. Oktober 2014 B. Nebel – Info I 13 / 20

Page 31: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Fibonacci-Folge: Das Kanninchenproblem

Manchmal sind kompliziertere Formen der Rekursionnotwendig, z.B. bei der Definition der Fibonacci-FolgeEingeführt von Leonardo da Pisa, genannt Fibonacci inseinem Buch Liber abbaci (1202), das u.a. die arabischenZiffern und den Bruchstrich in die westliche Welteinführten.Anzahl der Kannichen-Paare, die man erhält, wenn jedesPaar ab dem zweiten Monat ein weiteres Kannichen-Paarerzeugt (und kein Kannichen stirbt). Wir beginnen imMonat 0, in dem das erste Paar geboren wird:

Monat vorhanden geboren gesamt0. 0 1 11. 1 0 12. 1 1 23. 2 1 34. 3 2 5

31. Oktober 2014 B. Nebel – Info I 13 / 20

Page 32: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Fibonacci-Folge: Das Kanninchenproblem

Manchmal sind kompliziertere Formen der Rekursionnotwendig, z.B. bei der Definition der Fibonacci-FolgeEingeführt von Leonardo da Pisa, genannt Fibonacci inseinem Buch Liber abbaci (1202), das u.a. die arabischenZiffern und den Bruchstrich in die westliche Welteinführten.Anzahl der Kannichen-Paare, die man erhält, wenn jedesPaar ab dem zweiten Monat ein weiteres Kannichen-Paarerzeugt (und kein Kannichen stirbt). Wir beginnen imMonat 0, in dem das erste Paar geboren wird:

Monat vorhanden geboren gesamt0. 0 1 11. 1 0 12. 1 1 23. 2 1 34. 3 2 5

31. Oktober 2014 B. Nebel – Info I 13 / 20

Page 33: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Fibonacci-Zahlen

Die Fibonacci-Zahlen werden normalerweise wie folgtdefiniert (und beschreiben damit die vorhandenenKanninchen-Paare am Anfang des Monats):

fib(n) =

0, fallsn = 0;1, fallsn = 1;fib(n−1)+fib(n−2), sonst.

D.h. die Folge beginnt mit 0 und nicht mit 1.Beachte: Hier gibt es zwei rekursive Verwendungen derDefinition.Die Fibonacci-Zahlen spielen in vielen anderen Kontexteneine wichtige Rolle (z.B. Goldener Schnitt).

31. Oktober 2014 B. Nebel – Info I 14 / 20

Page 34: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Fibonacci-Zahlen in Python

Umsetzung in Python folgt direkt der mathematischenDefinition:

Python-Interpreter>>> def fib(n):... if n <= 1:... return n... else:... return fib(n-1) + fib(n-2)...>>> fib(35)9227465

31. Oktober 2014 B. Nebel – Info I 15 / 20

Page 35: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3)

wählt else-Zweig und ruft auf:| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 36: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2)

wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 37: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1)

wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 38: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück

| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 39: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2)

ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 40: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0)

wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 41: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück

| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 42: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2)

gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 43: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurück

fib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 44: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3)

ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 45: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1)

wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 46: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und

| ← fib(1) gibt 1 zurück← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 47: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 48: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3)

gibt 2 zurück

Visualisierung

31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 49: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Rekursive Aufrufe

Aufrufsequenz→ fib(3) wählt else-Zweig und ruft auf:

| → fib(2) wählt else-Zweig und ruft auf:| | → fib(1) wählt if-Zweig und| | ← fib(1) gibt 1 zurück| fib(2) ruft jetzt auf:| | → fib(0) wählt if-Zweig und| | ← fib(0) gibt 0 zurück| ← fib(2) gibt 1 zurückfib(3) ruft jetzt auf:| → fib(1) wählt if-Zweig und| ← fib(1) gibt 1 zurück

← fib(3) gibt 2 zurück

Visualisierung31. Oktober 2014 B. Nebel – Info I 16 / 20

Page 50: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Komplexe Rekursion: Verständnis undLaufzeit

Es gibt komplexere Formen der Rekursion: mehrfach,indirekt, durch Argumente.Es ist nicht ganz einfach, den Verlauf der Ausführung derfib-Funktion nachzuvollziehen.Dies ist aber auch nicht notwendig! Es reicht aus, sich zuvergegenwärtigen, dass:

falls die Funktion alles richtig macht für Argumente mitdem Wert < n,dann berechnet sie das Geforderte

→ Prinzip der vollständigen InduktionDie mehrfachen rekursiven Aufrufe führen zu sehr hoherLaufzeit!Auch hier ist eine iterative Lösung (while-Schleife)möglich.

31. Oktober 2014 B. Nebel – Info I 17 / 20

Page 51: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Iterative Lösung I

Im Allgemeinen ist es schwierig, Mehrfachrekursion inIteration umzuwandeln.Bei fib hilft die Beobachtung, dass man den Wert immerdurch die Addition der letzten beiden Werte berechnenkann. Das geht auch bei 0 startend!Generiere die Werte aufsteigend, bis die Anzahl dererzeugten Werte den Parameter n erreicht.

31. Oktober 2014 B. Nebel – Info I 18 / 20

Page 52: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Iterative Lösung II

Python-Interpreter>>> def ifib(n):... if n <= 1:... return n... a = 0... b = 1... i = 2... while i < n:... new = a + b... a = b... b = new... i += 1... return a + b

Visualisierung

31. Oktober 2014 B. Nebel – Info I 19 / 20

Page 53: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1415/info1/infoI07.pdfRekursion verstehen Fakultäts-funktion Fibonacci-Folge Rekursionverstehen

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Zusammenfassung

Rekursion ist eine bekannte Definitionstechnik aus derMathematik.Rekursion erlaubt es, bestimmte Funktion sehr kurz undelegant anzugeben.Dies ist nicht immer die effizienteste Form! Das ist aberabhängig von der Programmiersprache.Einfachrekursion kann meist einfach in Iterationumgewandelt werden.Mehrfachrekursion ist komplizierter.Es gibt noch komplexere Formen der Rekursion.Interessant werden rekursive Funktionen bei rekursivenDatenstrukturen.

31. Oktober 2014 B. Nebel – Info I 20 / 20