Etwas Ackermann-Funktion

Ich bin dynamisch

Die hier berechnete Funktion kann man so aufschreiben:

A(  0,  y) = y+1
A(x+1,  0) = A(x,        1 )
A(x+1,y+1) = A(x, A(x+1,y) )
Und bitte nicht an das 'Infinity' glauben - der Funktionswert übersteigt nur den Wertebereich von JavaScript-Variablen!

:
y:

Ergebnis:

Wertetabelle

  y=0 y=1 y=2 y=3 y=4 y=5 y=6 y=7 y=8 y=9 y=10 y=11 y=12 y=13 y=14 y=15 y=16 y=17 y=18 y=19 y=20 y=21 y=22 y=23
x=0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
x=1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
x=2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
x=3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
x=4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
x=5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
x=6 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
x=7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
x=8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Da der Wertebereich des JavaScript-Datentyps schon bei relativ kleinen Zahlen (x=3,y=53) überschritten wird, hier nochmal die Ackermanmnfunktion, aufbereitet für das Computeralgebrasystem MuPAD:

acker:=proc(x,y) begin
if x=0 then  return (y+1)
  else if x=1 then return (y+2)
    else if x=2 then return (2*y+3)
      else if x=3 then return(2^(y+3)-3)
        else if y=0 then return (acker(x-1,1))
	  else return (acker(x-1,acker(x,y-1)))
        end_if
      end_if
    end_if
  end_if
end_if
end_proc:


© Michael Bunk