À titre d'information, si vous souhaitez simplement utiliser la forme fermée, les algorithmes pour m<4 sont simples. Si vous souhaitez étendre à la tétrade, je vous suggère d'écrire un algorithme de puissance rapide en utilisant probablement la méthode binaire, puis avec cette méthode, vous pouvez écrire une fonction de tétrade. Ce qui ressemblerait à quelque chose comme :
int Tetration(int number, int tetrate)
{
long int product=1;
if(tetrate==0)
return product;
product=number;
while(tetrate>1)
{
product=FastPower(number,product);
tetrate--;
}
return product;
}
Ensuite, vous pouvez couvrir les cas jusqu'à n==4 et après cela, utiliser la définition récursive et les valeurs de A(5,n) débordent à une vitesse ridicule, donc ce n'est vraiment pas un problème. Certes, votre professeur ne sera probablement pas satisfait d'un tel algorithme, mais il s'exécutera beaucoup plus rapidement. Dans l'une de mes classes discrètes, lorsqu'on m'a demandé d'écrire un algorithme pour calculer les nombres de Fibonacci et ensuite trouver son O(n), j'ai écrit la forme fermée puis j'ai écrit O(1) et j'ai obtenu un crédit complet, certains professeurs apprécient les réponses intelligentes.
Ce qu'il est important de noter à propos de la fonction d'Ackerman, c'est qu'elle définit essentiellement l'hériarchie des fonctions additives sur les entiers, A(1,n) est l'addition, A(2,n) est la multiplication, A(3,n) est l'exponentiation, A(4,n) est la tétration et après 5, les fonctions croissent trop vite pour être applicables à grand chose.
Une autre façon de voir l'addition, la multiplication, etc :
Φ0 (x, y ) = y + 1
Φ1 (x, y ) = +(x, y )
Φ2 (x, y ) = ×(x, y )
Φ3 (x, y ) = ↑ (x, y )
Φ4 (x, y ) = ↑↑ (x, y )
= Φ4 (x, 0) = 1 if y = 0
= Φ4 (x, y + 1) = Φ3 (x, Φ4 (x, y )) for y > 0
(Utilise la notation préfixe c'est-à-dire +(x,y)=x+y, (x,y)=x y.