Einzelnen Beitrag anzeigen

kopernikus

Registriert seit: 8. Feb 2008
19 Beiträge
 
Delphi 10 Seattle Professional
 
#19

AW: Iterative Ackermannfunktion: Und sie gibt es doch (puh!)

  Alt 20. Mär 2013, 14:53
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;
  Mit Zitat antworten Zitat