Kann sich eine Funktion selbst rufen, unendlich oft?

4 Antworten

Von Experte Waldmensch70 bestätigt

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.


HarryXXX  16.02.2022, 08:52

Ja, sowas ist bei systemadministratorin total beliebt 😎

1

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.

Woher ich das weiß:Berufserfahrung – Software Engineer seit 2015, u.a. Telefónica und gutefrage

HarryXXX  16.02.2022, 09:03

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.

0
@HarryXXX

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.

0
HarryXXX  16.02.2022, 09:32
@thomaszZz, Software Engineer bei gutefrage

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.

0
HarryXXX  16.02.2022, 09:35
@HarryXXX

Häufiger sind allerdings die sogenannten Zombies, was aber natürlich zum gleichen Problem führt.

0

ja, aber im normalfall wird der stack gesprengt

wenn es unendlich sein soll, dann wird dafür tail call optimization benötigt

Woher ich das weiß:Studium / Ausbildung