Hi Christian!
Eine Kopie der Methode??? Welche Programmiersprache macht denn bei Rekursion eine Kopie der Methode??? Oder versteh ich dich da falsch??
Was passiert ist folgendes: Es wird die Rücksprungadresse auf den Stack gelegt und für jeden Methodenaufruf werden die lokalen Variablen der Methode auf dem Stack angelegt. Je nachdem, wie groß der Speicherplatzbedarf deiner lokalen Variablen ist, geht das natürlich unter Umständen mächtig auf die Ressourcen.
Sollte es tatsächlich Implementationen von Programmiersprachen geben, die diese Ressourcen wegoptimieren, dan ist das auf jeden Fall Sache des Compilers und nicht Prinzip der Sprachdefinition. Bei der Ausnutzung von Compiler-Spezifischen Eigenschaften währe ich echt vorsichtig!
ABER:
Wenn deine Rekursion immer nur am Ende stattfindet, dann ist es überhaupt kein Problem die Rekursion in eine Iteration umzuwandeln!
Die Methode wird nicht von sich selbst aufgerufen, sondern von dem Programmteil, der mit dem Aufruf angefangen hat. Die ehemals Rekursive Methode muss dann nur noch mitteilen, ob bereits das Ende erreicht ist.
Vorteil: Hier spart man enorm Speicher. Nur eine Rücksprungadresse und nur ein Satz lokaler Variablen im Stack.
Selbst wenn du auf deine Rekursion bestehen willst, ist es hier ein einfaches, die benötigten Variablen für die Methode global zu machen (static). Da der eine Durchlauf ja am Ende ist werden die Variablen ja wohl nicht mehr gebraucht und können für die nächste Rekursion genutzt werden.
Vorteil: nur noch ein Satz an Variablen
Nachteil: bleibt das Problem mit der Rücksprungadresse
Gruß
Benky
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]