Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Algorithmen (http://www.informatikerboard.de/board/board.php?boardid=17)
----- Proogramm mit Rekursion (http://www.informatikerboard.de/board/thread.php?threadid=3861)


Geschrieben von Informatikdepp am 17.02.2018 um 22:21:

  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



Geschrieben von as_string am 18.02.2018 um 10:28:

 

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


Forensoftware: Burning Board, entwickelt von WoltLab GmbH