3.4. Zyklus (Wiederholung) – Rekursion
Rekursives Programmieren setzt insbesondere das Verstehen von Funktionen mit Parametern voraus.
Funktionen mit Parametern
In Python-Programmen mit einer tkinter-GUI können neben den Callback-Funktionen auch andere Funktionen – darunter rekursive Funktionen – deklariert werden.
Eine Funktion ist ein Unterprogramm, das in einem Programm wiederholt aufgerufen werden kann.
Die Funktionsdeklaration:
- def<Funktionsname>(<formaler oder formale Parameter>):
- <Anweisungesblock>
Der Funktionsaufruf:
- <Funktionsname>(<aktueller oder aktuelle Parameter>)
Ein Beispiel einer Funktion mit einem formalen Parameter und ohne Rücksprungwert an die rufende Stelle sowie die Aufrufe der Funktion mit aktuellen Parametern.
# rekursive Funktion
def gruessen(pgruss):
print(f"{pgruss} vom Meer.")
# Funktionsaufrufe
gruessen("Hallo")
gruessen("Guten Tag")
gruss="Moin"
gruessen(gruss)
| 2. und 3. Zeile | Die Funktion »gruessen« mit dem formalen Parameter »pgruss« wird deklariert. |
| 3. Zeile |
Mit »print« wird der f-Sring »f"{pgruss} vom Meer."« in der |
| 6. bis 9. Zeile | Die Funktion wird viermal mit unterschiedlichen aktuellen Parametern aufgerufen. |
| 6. Zeile | Die Funktion wird mit dem aktuellen Parameter »"Hallo"« aufgerufen. |
| 7. Zeile | Die Funktion wird mit dem aktuellen Parameter »"Guten Tag"« aufgerufen. |
| 8. Zeile | Der Variable »gruss« wird der Wert "Moin" zugewiesen. |
| 9. Zeile | Die Funktion wird mit dem aktuellen Parameter – dem Wert der Variable »gruss« – aufgerufen. |
Hinweis: Er ist empfehlenswert, die formalen Parameter in den Funktionsdeklarationen besonders zu kennzeichnen (z. B. durch den Kleinbuchstaben p am Anfang). Dadurch ist es besser möglich, die aktuellen von den formalen Parametern zu unterscheiden.
Ein Beispiel einer Funktion mit einem formalen Parameter und dem Rücksprungwert an die rufende Stelle sowie den Aufrufen der Funktion mit aktuellen Parametern.
# rekursive Funktion
def potenz(pn):
return pn*pn
c=11
# Funktionsaufrufe
a=potemz(3)
b=potenz(7)
d=potenz(c)
| 2. bis 3. Zeile | Die Funktion »potenz« mit dem formalen Parameter "pn" wird deklariert. |
| 3. Zeile | Die Anweisung »return pn*pn« zum Rücksprung an die rufende Stelle mit dem Wert »pn*pn«. |
| 6. Zeile | Der Variable »c« wird der Wert 11 zugewiesen. Die Variable wird in der 9. Zeile im Funktionsaufruf als aktualler Parameter verwendet. |
| 7. bis 9. Zeile | Die Funktion wird dreimal mit unterschiedlichen aktuellen Parametern aufgerufen. |
| 7. Zeile |
Die Funktion wird in der Wertzuweisungen der Variablen »a« mit den aktuellem Parametern
3 aufgerufen. Der Rücksprungwert der Funktion wird der Variable »a« zugewiesen. |
| 8. Zeile |
Die Funktion wird in der Wertzuweisungen der Variablen »b« mit den aktuellem Parametern
7 aufgerufen. Der Rücksprungwert der Funktion wird der Variable »b« zugewiesen. |
| 9. Zeile |
Die Funktion wird in der Wertzuweisungen der Variablen »d« mit dem Wert der Variable
»c« als aktuellem Parametern
aufgerufen. Der Rücksprungwert der Funktion wird der Variable »d« zugewiesen. |
Nachfolgend ein Beispiel einer Funktion mit zwei formalen Parametern und dem Rückgabwert an die rufende Stelle sowie den Aufrufen der Funktion mit aktuellen Parametern.
# rekursive Funktion
def mittelwert(pzahl1, pzahl2):
return (pzahl1+pzahl2)/2.0
zahl1=20.7
zahl2=4.3
# Funktionsaufrufe
d1=mittelwert1.8, 3.2)
d2=mittelwert(6.9, 10.1)
d3=mittelwert(zahl1, zahl2)
| 2. und 3. Zeile | Die Funktion »mittelwert« mit den formalen Parametern »pzah1« und »pzah2l« wird deklariert. |
| 3. Zeile | Der Rücksprung »return« an die rufende Stelle erfolgt mit dem Wert von »(pzahl1+pzahl2)/2«, wobei der Operator / die Division von Gleitkommazahlen ist. |
| 5. Zeile | Der Variable »zahl1« wird der Wert 20.7 zugewiesen. Die Variable wird in der 10. Zeile im Funktionsaufruf als aktualler Parameter verwendet. |
| 6. Zeile | Der Variable »zahl2« wird der Wert 4.3 zugewiesen. Die Variable wird in der 10. Zeile im Funktionsaufruf als aktualler Parameter verwendet. |
| 8. Zeile |
Die Funktion wird in der Wertzuweisung der Variable »d1« mit dem aktuellen Parametern
1.8 und 3.2 aufgerufen. Der Rücksprungwert der Funktion wird der Variable »d1&aquo; zugewiesen. |
| 9. Zeile |
Die Funktion wird in der Wertzuweisung der Variable &aquo;d2« mit dem aktuellen Parametern
6.9 und 10.1 aufgerufen. Der Rücksprungwert der Funktion wird der Variable »d2« zugewiesen. |
| 8. Zeile |
Die Funktion wird in der Wertzuweisung der Variable »d3« mit den Werten der Variablen
»zahl1« und »zahl2« als aktuelle Parametern aufgerufen. Der Rücksprungwert der Funktion wird der Variable »d3« zugewiesen. |
Aufgabe A36
Gib die Werte an, die den Variablen »d1«, »d2« und »d3« von der
Funktion
Abschließend zu Funktionen mit Parametern
In einer Funktionsdeklaration können ein formaler oder mehrere formale Parameter stehen:
- die Funktion »gruessen« hat einen formalen Parameter »pgruss«
- die Funktion »potenz« hat einen formalen Parameter »pn«
- die Funktion »mittelwert« hat zwei formalen Parameter »pzahl1« und »pzahl2«
Jeder formale Parameter wird innerhalb der Funktion wie eine Variable verwendet.
Seinen Wert erhält jeder formale Parameter durch die Übergabe des aktuellen Parameters im Aufruf der Funktion. Das heißt, dem formalen Parameter wird der aktuelle Parameter des Funktionsaufrufs zugewiesen
Aufgabe A37
Gegeben ist die Funktion »f« und drei Aufrufe der Funktion in den Wertzuweisungen der Variablen »zahl1«, »zahl2« und »zahl3«:
- gib die Namen der formalen Parameter der Funktion an
- gib die Namen der aktuellen Parameter in den Aufrufen der Funktion an
- gib die Werte der Variablen »zahl1«, »zahl2« und »zahl3« an
def f(px, py, pz):
return px*(py+pz)
x=5
y=6
z=7
zahl1=f(2, 3, 4)
zahl2=f(-6, -4, 5)
zahl3=f(x, y, z)