Python Module und Rekursion

Werbung
Module und Rekursion
Vorsemesterkurs Informatik
Praktischer Teil
WS2012/13
4. Oktober 2012
Vorkurs Informatik - WS 2012/13
Module und Importe
Vorkurs Informatik - WS 2012/13
Wofür überhaupt?
Python liefert zunächst die wichtigsten Funktionalitäten
Was wenn man mehr braucht?
Selbst implementieren
Fertige Funktionen importieren
Warum nicht alles gleich am Anfang importieren?
Vorkurs Informatik - WS 2012/13
Wie geht das?
Definition
Ein Python-Modul ist eine Datei mit Python-Definitionen und -Anweisungen.
Was wird importiert?
Module oder ihre Anteile
Syntax:
Das ganze Modul laden:
import MODULNAME
Ausgewählte Funktionen aus dem Modul laden:
from MODULNAME import FUNKTION1, FUNKTION2, …
Alle Funktionen aus diesem Modul laden:
from MODULNAME import *
Vorkurs Informatik - WS 2012/13
Beispiele
Syntax:
Das ganze Modul laden:
>>> import random
>>> random.randint(0, 10)
10
Ausgewählte Funktionen aus dem Modul laden:
>>> from random import randint
>>> randint(0, 10)
5
Vorkurs Informatik - WS 2012/13
Was wähle ich aus?
Wann was benutzen?
import MODULE
Normalerweise
from MODULE import …
- Bei häufiger Verwendung
- Beim Testen auf der Konsole
- Achtung: Gleiches Scope!
Vorkurs Informatik - WS 2012/13
Existierende Module
Nützliche Module:
random
Funktionen: random(), randint(), …
http://docs.python.org/release/3.2/library/random.html
math
Funktionen: ceil(), floor(), exp(), sqrt(), …
http://docs.python.org/release/3.2/library/math.html
Vorkurs Informatik - WS 2012/13
Rekursion
Vorkurs Informatik - WS 2012/13
Was ist Rekursion?
“Um Rekursion zu verstehen,
muss man erstmal Rekursion verstehen”
Prinzip:
Funktion ruft sich selbst auf
Vorkurs Informatik - WS 2012/13
Braucht man sie wirklich?
Wofür ist Rekursion gut?
Rekursiv definierte mathematische Konstrukte
(häufig) elegantere, kürzere und verständlichere Algorithmen
[als iterative Alternativen]
Wofür ist Rekursion schlecht?
Funktionen mit mehreren (großen) Parametern
Vorkurs Informatik - WS 2012/13
Gefahr der Rekursion
Wie Endlosrekursion stoppen?
def recursion():
recursion()
http://www.flickr.com/photos/torley/2361164281/
Vorkurs Informatik - WS 2012/13
Abbruchsbedingung
Wie Endlosrekursion stoppen?
Wir brauchen eine Abbruchbedingung!
Vorgehen allgemein:
def rek_fkt(parameter):
if BEDINGUNG:
return ERGEBNIS
# mache ggf. etwas…
return rek_fkt(NEUER_WERT)
Abbruchbedingung
rekursiver Aufruf
Vorkurs Informatik - WS 2012/13
Beispiel
Beispiel Fibonacci-Zahlen:
(0, 1, 1, 2, 3, 5, 8, 13, …)
Mathematische Definition:
f(0) = 0, f(1) = 1
F.a. n ≥ 1: f(n) = f(n-1) + f(n-2)
Implementierung:
def fib_rek(n):
if n < 2:
# Abbruchbedingung
return n
http://de.wikipedia.org/w/index.php?title=
Datei:FibonacciBlocks.svg
return fib_rek(n-1) + fib_rek(n-2) # Rekursion
Vorkurs Informatik - WS 2012/13
Ausführung der Rekursion
Implementierung:
def fib_rek(n):
if n < 2:
return n
fib_rek(3)
fib_rek(2)
+
fib_rek(1)
return fib_rek(n-1) + fib_rek(n-2)
fib_rek(1) + fib_rek(0)
+ 1
+
+ 1
1
0
Ergebnis: 2
Vorkurs Informatik - WS 2012/13
Rekursion vs. Iteration
Beispiel Fakultätsfunktion n!
Rekursion:
Iteration:
def fak_rek(n):
if n < 2:
return 1
def fak_it(n):
if n < 2:
return 1
return n * fak_rek(n-1)
result = n
while n > 1:
n -= 1
result *= n
return result
Vorkurs Informatik - WS 2012/13
Ausblick: Übungsaufgabe (1/2)
Aufgabenstellung
Implementiere die Collatz-Funktion aus der Vorlesung als rekursive Python-Funktion.
Die Funktion soll:
-
einen beliebigen Startwert als Parameter erhalten
-
bei jedem Aufruf die aktuelle Zahl ausgeben und
-
terminieren, sobald das erste Mal die Zahl 1 in der Folge auftaucht.
def collatz(n):
if n == 1:
# Return für den Basisfall
else:
# Gebe n aus
# Rufe sich rekursiv gemäß der Funktionsdefinition auf
Vorkurs Informatik - WS 2012/13
Ausblick: Übungsaufgabe (2/2)
Definition der Collatzfunktion
def collatz(n):
if n == 1:
# Return für den Basisfall
else:
# Gebe n aus
# Bestimme, ob n gerade ist (mittels Modulo-Rechnung)
# Abhängig davon rufe sich rekursiv mit dem entspr. Parameter auf
Vorkurs Informatik - WS 2012/13
Fragen?
Vorkurs Informatik - WS 2012/13
Vielen Dank für die
Aufmerksamkeit!
Vorkurs Informatik - WS 2012/13
Herunterladen