akc(x,y):={ if (x==0) return y+1; if (y==0) return akc(x-1,1); return ack(x-1,ack(x,y-1)); }ou bien en utilisant ifte :
ack(x,y):=ifte(x==0,y+1, ifte(y==0,ack(x-1,1),ack(x-1,ack(x,y-1))));On remarque que le temps pour calculer la valeur pour a(3,5) est de 5.06s ce qui est tres long, mais on peut donc améliorer le programme en arrêtant la récursivité lorsque x==3.
a(x,y):={ if (x==0) return y+1; if (x==1) return y+2; if (x==2) return 2*y+1; if (x==3) return 2^(y+3)-3; if (y==0) return a(x-1,1); return a(x-1,a(x,y-1)); }On peut aussi améliorer le programme en arrêtant la récursivité lorsque x==4.
a(x,y):={ if (x==0) return y+1; if (x==1) return y+2; if (x==2) return 2*y+1; if (x==3) return 2^(y+3)-3; if (x==4) { local p:=1; for (j:=1;j<=y+3;j++) p:=2^p; return p-3; } if (y==0) return a(x-1,1); return a(x-1,a(x,y-1)); }Essayez a(4,1)=65533, a(4,2)....