Erkundung Rekursive Funktionen
Nachdem wir nun wissen, was die grundsätzliche Idee von Rekursion ist, wollen wir uns nun rekursive Funktionen anschauen. Wir betrachten erneut das Problem sum_list
von vorher und schauen uns zunächst mal die iterative Lösung an:
Eine iterative Lösung, die mit einer Schleife über die Listenelemente iteriert und sie Element für Element aufsummiert, könnte folgendermaßen aussehen:
def sum_list(liste):
summe = 0
for element in liste:
summe += element
return summe
Wir definieren also eine Variable summe
, initialisieren sie mit 0 und addieren dann in der Schleife jedes Element auf die Variable. Wenn wir über alle Elemente gelaufen sind, geben wir die Summe zurück.
Aufgabe 4
Im folgenden Fenster findest du eine rekursive Version von
sum_list
. Spiel ein wenig mit der Funktionsdefinition herum und teste verschiedene Eingaben. Was passiert zum Beispiel, wenn du in Zeile 3 die 0 in eine 1 änderst? Führe die Beispielaufrufe durch einen Klick auf den Button rechts aus.def sum_list(liste): if len(liste) == 0: return 0 else: return liste[0] + sum_list(liste[1:]) print(sum_list([1, 2, 3, 4, 5])) print(sum_list([4711])) print(sum_list([])) #print(sum_list(_dein_Beispiel_hier_))
Hinweis: bei der Funktion wird Slicing verwendet. Damit können wir eine Liste aufteilen bzw. auf eine Teilliste zugreifen.
liste[i:j]
beschreibt dabei die Liste bestehend aus allen Elementen von Index i
bis Index j-1
. Wenn i weggelassen wird, ist das als hätte man 0 geschrieben. Wenn j weggelassen wird, ist das als hätte man die Länge der Liste geschrieben. Für mehr Informationen zu Slicing siehe Kapitel 6.3.2.14.2
Aufgabe 5
Schau dir die Funktion aus Aufgabe 4 noch einmal genauer an.
- Nenne Unterschiede im Vergleich zu anderen Funktionen, die du bereits kennst.
- Nenne Unterschiede zwischen der rekursiven und iterativen Lösung von
sum_list
. Wie unterscheidet sich die Vorgehensweise der beiden Funktionen?