![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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/35.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/36.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/37.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/38.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/39.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/40.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/41.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/42.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/43.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/45.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/46.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/47.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/48.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/49.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/50.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/51.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/52.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022041420/5e1e6f0946401c735d4a7570/html5/thumbnails/53.jpg)
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