Rekursion ergibt kein Sinn/Türme von Hanoi

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JojoEffekt
User
Beiträge: 8
Registriert: Freitag 28. Januar 2022, 21:26

Hey,
vielleicht kommt euch das Problem mit dem Spiel "Türme von Hanoi" bekannt vor. Hier ist einmal der Code von einer Webseite die diesen erstellt hat. Er basiert auf Rekursion, jedoch scheint er mir nicht logisch, wie kann denn jemals "if source:, target.append(source.pop()), hanoi(n - 1, helper, source, target) " aufgerufen werden, wenn immer vorher die Funktion selbst aufgerufen wird? Dachte ich hätte Rekursion verstanden, aber das Erscheint mir überhaupt nicht logisch, kann mir jemand erklären, wie das "if"-Statement aufgerufen werden kann/wie da python funktioniert?


def hanoi(n, source, helper, target):
--- if n > 0:
------ hanoi(n - 1, source, target, helper)
------ if source:
---------- target.append(source.pop())
------ hanoi(n - 1, helper, source, target)
source = [4,3,2,1]
target = []
helper = []
hanoi(len(source),source,helper,target)
print (source, helper, target)
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das nennt sich Rekursionsbeginn, und passiert, weil bei n == 0 nicht tiefer abgestiegen wird. Sondern ein implizites Return erfolgt. Womit eben die nächsten Instruktionen ausgeführt werden.
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Ich glaube, was bei Rekursion manchmal missverstanden wird, ist, dass das Programm nicht einfach nur "hart" an eine andere Stelle springt. Sobald eine rekursiv aufgerufene Funktion beendet ist, wird das Programm an der Stelle (bildlich gesprochen) "hinter" dem ursprünglichen Funktionsaufruf wieder fortgesetzt. Ähnlich wie man bei einer Kellertreppe auf dem Rückweg dieselben Stufen in umgekehrter Reihenfolge wieder hochgehen muss.
Antworten