next up previous contents index
suivant: Des programmes tres simples monter: Un exemple de fonction précédent: La définition   Table des matières   Index

Le programme

Voici un premier programme :
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.
On écrit :
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.
On écrit :
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)....



Documentation de giac écrite par Renée De Graeve