Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ackermann-Problem Stacküberlauf (https://www.delphipraxis.net/13679-ackermann-problem-stackueberlauf.html)

MisterNiceGuy 23. Dez 2003 21:28


Ackermann-Problem Stacküberlauf
 
Hi,
mal wieder die Ackermannfunktion, die mir Sorgen macht.
Ich weiß, dass es das Thema schon einmal gab, aber das hat mir nicht wirklich geholfen!
Der Stack läuft über, obwohl das inner Schule nich passiert und ich bin mir eigentlich
sehr sicher alles richtig gemacht zu haben!!

Code:
function TForm1.acker(m,n : integer) : integer;
begin
if m=0 then n := n+1
    else
       if n=0 then
           acker(m-1,1)
              else acker(m-1,acker(m,n-1));
end;
Kann mir mal jemand nen Tip geben?? :stupid:

kiar 23. Dez 2003 21:49

Re: Ackermann-Problem Stacküberlauf
 
deine funktion ruft sich immer wieder selbst auf . das muss zum überlauf führen.


raik

Niels 23. Dez 2003 22:30

Re: Ackermann-Problem Stacküberlauf
 
Moin!

Zitat:

Zitat von MisterNiceGuy
Code:
function TForm1.acker(m,n : integer) : integer;
begin
if m=0 then n := n+1
    else
       if n=0 then
           acker(m-1,1)
              else acker(m-1,acker(m,n-1));
end;

Also zuerst mal zu deiner ersten IF-Bedingung (m=0) ...da hier ja keine Rekursion statt findet, brauchste auf n auch nix mehr zuzuweisen.
BTW deine Funktion hat (wenn ich das richtig sehe) überhaupt keinen rückgabewert. Der Compiler müsste doch eigentlich meckern.

Bau erstmal überall wo's hin soll
Delphi-Quellcode:
result := ...
ein. Dann könnte man evtl sagen woran der Fehler noch liegt.

MfG Niels


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr.

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