Proogramm mit Rekursion

Neue Frage »

Auf diesen Beitrag antworten »
Informatikdepp Proogramm mit Rekursion

Meine Frage:
Es geht um folgendes Programm

def funktion (k) :
if k > 1 :
return funktion (k-1) + k
else:
return 1

n = 10
z = funktion (n)
print (z)

Dazu die Frage welches Ergebnis es liefert.


Meine Ideen:
von Hörensagen hab ich mitbekommen das es das Ergebnis 55 liefert. allerdings hab ich keine Ahnung worum es bei dem Programm geht und wie man auf 55 kommt
Danke im voraus für eure erkläungen
 
Auf diesen Beitrag antworten »
as_string

Du kannst ja eben so vorgehen, wie der Computer:
Die Funktion wird erst mit 10 als Argument aufgerufen. 10 ist größer als 1, also gibt die Funktion 10 plus den Funktionswert von 9 zurück.
Der Funktionswert von 9 ist 9 plus der Funktionswert von 8
Der Funktionswert von 8 ist 8 plus der Funktionswert von 7
Der Funktionswert von 7 ist 7 plus der Funktionswert von 6
Der Funktionswert von 6 ist 6 plus der Funktionswert von 5
Der Funktionswert von 5 ist 5 plus der Funktionswert von 4
Der Funktionswert von 4 ist 4 plus der Funktionswert von 3
Der Funktionswert von 3 ist 3 plus der Funktionswert von 2
Der Funktionswert von 2 ist 2 plus der Funktionswert von 1
Der Funktionswert von 1 ist 1 (das ist der Rekursionsabbruch)
Ab hier kannst Du rückwärts einsetzen, also gehst Du die ganze Liste wieder aufwärts:
Der Funktionswert von 2 ist 2 plus der Funktionswert von 1, den kennen wir jetzt, der ist nämlich 1, so dass die Funktion dann den Wert 1+2 = 3 zurück gibt.
Der Funktionswert von 3 ist 3 plus der Funktionswert von 2, den kennen wir jetzt, der ist nämlich 1+2=3, so dass die Funktion dann den Wert 1+2+3 = 6 zurück gibt.
Der Funktionswert von 4 ist 4 plus der Funktionswert von 3, den kennen wir jetzt, der ist nämlich 1+2+3, so dass die Funktion dann den Wert 1+2+3+4 zurück gibt.
Und so weiter. Die Funktion rechnet also immer die Summe aller Zahlen von 1 bis zu dem Funktionswert aus.
Das kann auch die Gaußsche Summenformel. Die geht einfach: [latex]\sum_{k=1}^n k = \frac{n\cdot\left(n+1\right)}{2}[/latex] Wenn man hier n=10 einsetzt, rechnet man (10*11)/2 = 55

Gruß
Marco
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »