Der im ersten Beitrag angegebene Quelltext für die iterative Berechnung der Ackermann-Funktion enthält noch einen kleinen Fehler, der sich allerdings nur bei j=m=0 auswirkt. Es fehlt eine Initialisierung des Arrays
place auf -1.
Mit ein paar Schönheitskorrekturen muss es heißen:
Delphi-Quellcode:
function ack (n,m : int64): int64;
var
value,place : array of int64;
k : integer;
begin
result:=0;
if n=0 then result:=m+1
else begin
setlength(value,n+1);
setlength(place,n+1);
for k:=0 to n do place[k]:=-1;
value[0]:=1;
place[0]:=0;
repeat
inc(max);
inc(value[0]);
inc(place[0]);
for k:=0 to n-1 do begin
if place[k]=1 then begin
value[k+1]:=value[0];
place[k+1]:=0;
if k<>n then break;
end
else begin
if place[k]=value[k+1] then begin
value[k+1]:=value[0];
inc(place[k+1]);
end
else break;
end;
end;
until place[n]=m;
result:=value[0];
end
end;