Kann sich eine Funktion selbst rufen, unendlich oft?
Wenn ich die funktion in der funktion schreibe kann sie sich dann unendlich oft selbst rufen?
Z.b.
def same():
print("Gott Wtf")
same()
4 Antworten
Theoretisch ja. Dieses Verhalten wird als Rekursion bezeichnet und stellt eine Alternative zur klassischen Iteration via Schleifenkonstrukt dar.
Praktisch würde ab einer bestimmten Anzahl an Wiederholungen der Stack volllaufen und somit das Programm abstürzen.
Sowas ist ein rekursive Funktion und wird oft benutzt.
In der Realität gibt es aber normalerweise eine Abbruchbedingung, weil die Funktion ansonsten nichts bewirkt und das Programm irgendwann abstürzt, weil ihm der Speicher ausgeht.
Sie würde dann theoretisch unendlich oft aufgerufen werden, ja. Stichwort ist Rekursion.
In der Praxis wäre allerdings recht schnell Schluss, da der Call Stack überläuft. Auf dem Call Stack werden aktuelle Funktionsabrufe abgelegt und bei rekursiven Aufrufen ohne Abbruchkriterien wächst dieser stetig weiter bis der Speicher ausgeht.
Hängt von der Umgebung ab. Wenn man so etwas z.B. auf der JVM ausführt, ist die Hardware irrelevant, da der Stack Size selten mehr als mit paar MB konfiguriert ist.
Das hat schon mancher mit simplen Shell-Scripts geschafft.
Und vermutlich auch nur damit.
Wer so unprofessionell ist, irgendwelche Shell Scripts blind auf Prod Servern auszuführen, der hat es auch nicht anders verdient.
Ändert aber nichts an meiner Antwort.
Programmierer sind manchmal unberechenbar. Allerdings fangen es die meisten Monitor Systeme rechtzeitig ab.
Allerdings kriegt man sowas auch mal als Bug bei professioneller Software kostenlos mitgeliefert.
ja, aber im normalfall wird der stack gesprengt
wenn es unendlich sein soll, dann wird dafür tail call optimization benötigt
Wenn jemand sowas auf einem ordentlichen Server mit 500 Kernen und 2 Terabyte Hauptspeicher aufruft, dann ist das mit dem schnell zu Ende recht relativ. Da kann man nur noch hoffen, dass man das Ding rechtzeitig killen kann, bevor die Hütte einfällt.