Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stack Überlauf bei Rekursion (https://www.delphipraxis.net/77993-stack-ueberlauf-bei-rekursion.html)

C0lumb0 27. Sep 2006 19:25


Stack Überlauf bei Rekursion
 
Hallo Delphifreunde,
ich schreibe gerade ein Programm, wo ich eine sehr tiefe Rekursion verwende (über 100000!!) Das Programm gibt mir dann einen Stack Überlauf an und kann die Rekusrsion deshalb nicht ausführen.
Wie kann man das verhindern oder wie kann man den Stack erhöhen (mein Arbeitsspeicher von 1GB dürfte doch ausreichen). Ich weiß ja dass es keine Endlosrekursion ist sondern zum Ergebnis führt somit muss es ja nicht abgebrochen werden!

Hier mein Code:
Delphi-Quellcode:
procedure Tform1.kaufen;
begin
  while not allesgekauft do
    begin
      inc(monat);
      kontostand:=budget+kontostand;
      for i:=elemente-1 downto 0 do
        begin
          if A[i]<=kontostand then
           begin
            kaufe(i);
           end;
        end;
        kontostand:=kontostand2;
        kontostand2:=0;
      if Kontostand>=wertelemente then
       begin
         allesgekauft:=true;
         edit3.Text:=inttostr(monat);
       end;
      kaufen;
    end;
end;

procedure TAufgabe1.kaufe(Enummer:integer);
begin
  Kontostand:=Kontostand-A[Enummer];
  Kontostand2:=kontostand2+A[Enummer];
end;
MfG Andre

ich hoffe ihr könnt mir helfen..

Khabarakh 27. Sep 2006 19:34

Re: Stack Überlauf bei Rekursion
 
Öhm - ist der rekursive Aufruf von kaufen nicht unsinnig und -nötig? Du solltest ihn einfach entfernen können.

SirThornberry 27. Sep 2006 19:37

Re: Stack Überlauf bei Rekursion
 
du kannst zum einen die Stackgröße in den Projektoptionen einstellen und zum anderen kannst du dir auch selbst einen Stack nachbauen so das du nicht wirklich eine rekursion hast sonder innerhalb einer Procedure das nur simulierst.

C0lumb0 27. Sep 2006 20:21

Re: Stack Überlauf bei Rekursion
 
ja danke es reicht "kaufen" eifach rauszunehmen .. war total unsinnig das da reinzuschreiben

Vielen Dank für die schnellen Antworten!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz