Top Banner
Informatik I: Einführung in die Programmierung 9. Rekursion Albert-Ludwigs-Universität Freiburg Bernhard Nebel 10. November 2017
60

Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

Nov 01, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

Informatik I: Einführung in die Programmierung9. Rekursion

Albert-Ludwigs-Universität Freiburg

Bernhard Nebel10. November 2017

Page 2: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

Rekursionverstehen

Fakultäts-funktion

Fibonacci-Folge

Rekursion verstehen

10. November 2017 B. Nebel – Info I 2 / 20

Page 3: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

Rekursionverstehen

Fakultäts-funktion

Fibonacci-Folge

Rekursion verstehen

Um Rekursion zu verstehen, muss man zuerst einmalRekursion verstehen.

Abb. in Public Domain, Quelle Wikipedia

10. November 2017 B. Nebel – Info I 4 / 20

Page 4: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

Rekursionverstehen

Fakultäts-funktion

Fibonacci-Folge

Rekursion verstehen

Um Rekursion zu verstehen, muss man zuerst einmalRekursion verstehen.

Abb. in Public Domain, Quelle Wikipedia

10. November 2017 B. Nebel – Info I 4 / 20

Page 5: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

Rekursionverstehen

Fakultäts-funktionRekursiveDefinition

Fakultät in Python

Einfache Rekursionund Iteration

Fibonacci-Folge

Fakultätsfunktion

10. November 2017 B. Nebel – Info I 5 / 20

Page 6: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 7 / 20

Page 7: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 7 / 20

Page 8: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 7 / 20

Page 9: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 7 / 20

Page 10: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 7 / 20

Page 11: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 7 / 20

Page 12: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 8 / 20

Page 13: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 8 / 20

Page 14: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 8 / 20

Page 15: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 8 / 20

Page 16: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 9 / 20

Page 17: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 9 / 20

Page 18: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 9 / 20

Page 19: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 9 / 20

Page 20: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 9 / 20

Page 21: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 9 / 20

Page 22: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 9 / 20

Page 23: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 9 / 20

Page 24: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 9 / 20

Page 25: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 10 / 20

Page 26: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

Rekursionverstehen

Fakultäts-funktion

Fibonacci-FolgeDefinition derFibonacci-Zahlen

Fibonacci inPython

Fibonacci iterativ

Fibonacci-Folge

10. November 2017 B. Nebel – Info I 11 / 20

Page 27: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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 Welt einführte.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

10. November 2017 B. Nebel – Info I 13 / 20

Page 28: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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 Welt einführte.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

10. November 2017 B. Nebel – Info I 13 / 20

Page 29: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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 Welt einführte.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

10. November 2017 B. Nebel – Info I 13 / 20

Page 30: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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 Welt einführte.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

10. November 2017 B. Nebel – Info I 13 / 20

Page 31: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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 Welt einführte.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

10. November 2017 B. Nebel – Info I 13 / 20

Page 32: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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 Welt einführte.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

10. November 2017 B. Nebel – Info I 13 / 20

Page 33: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 14 / 20

Page 34: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 15 / 20

Page 35: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 36: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 37: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 38: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 39: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 40: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 41: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 42: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 43: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 44: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 45: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 46: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 47: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 48: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 16 / 20

Page 49: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

Visualisierung10. November 2017 B. Nebel – Info I 16 / 20

Page 50: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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.

10. November 2017 B. Nebel – Info I 17 / 20

Page 51: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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.

10. November 2017 B. Nebel – Info I 18 / 20

Page 52: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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

10. November 2017 B. Nebel – Info I 19 / 20

Page 53: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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.Rekursion kann als Beispiel für das Konzept derSelbstanwendung verstanden werden, das in derInformatik weit verbreitet ist.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.

10. November 2017 B. Nebel – Info I 20 / 20

Page 54: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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.

Rekursion kann als Beispiel für das Konzept derSelbstanwendung verstanden werden, das in derInformatik weit verbreitet ist.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.

10. November 2017 B. Nebel – Info I 20 / 20

Page 55: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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.Rekursion kann als Beispiel für das Konzept derSelbstanwendung verstanden werden, das in derInformatik weit verbreitet ist.

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.

10. November 2017 B. Nebel – Info I 20 / 20

Page 56: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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.Rekursion kann als Beispiel für das Konzept derSelbstanwendung verstanden werden, das in derInformatik weit verbreitet ist.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.

10. November 2017 B. Nebel – Info I 20 / 20

Page 57: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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.Rekursion kann als Beispiel für das Konzept derSelbstanwendung verstanden werden, das in derInformatik weit verbreitet ist.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.

10. November 2017 B. Nebel – Info I 20 / 20

Page 58: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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.Rekursion kann als Beispiel für das Konzept derSelbstanwendung verstanden werden, das in derInformatik weit verbreitet ist.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.

10. November 2017 B. Nebel – Info I 20 / 20

Page 59: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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.Rekursion kann als Beispiel für das Konzept derSelbstanwendung verstanden werden, das in derInformatik weit verbreitet ist.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.

10. November 2017 B. Nebel – Info I 20 / 20

Page 60: Informatik I: Einführung in die Programmierunggki.informatik.uni-freiburg.de/teaching/ws1718/info1/infoI09.pdf · Rekursion verstehen Fakultäts-funktion Fibonacci-Folge Definitionder

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.Rekursion kann als Beispiel für das Konzept derSelbstanwendung verstanden werden, das in derInformatik weit verbreitet ist.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.

10. November 2017 B. Nebel – Info I 20 / 20