Section courante

A propos

Section administrative du site

La célèbre fonction d'Ackermann, proposée en 1926 par le mathématicien allemand Wilhelm Ackermann, est devenue au fil du temps l'un des exemples les plus connus lorsqu'il est question de récursivité en mathématiques et en informatique théorique. Cette fonction possède une propriété fascinante : sa croissance est extraordinairement rapide. Alors que les fonctions linéaires, quadratiques, polynomiales et même exponentielles augmentent déjà à des rythmes impressionnants, la fonction d'Ackermann dépasse largement ces catégories dès que les valeurs de ses paramètres deviennent un peu plus élevées. C'est précisément cette caractéristique qui lui a valu une place de choix dans les manuels consacrés aux algorithmes, à la théorie de la calculabilité et aux techniques de programmation récursive. Paradoxalement, bien que sa formule soit abondamment citée dans les ouvrages spécialisés et les cours universitaires, le nom de son créateur demeure relativement méconnu du grand public. La fonction d'Ackermann est également intéressante parce qu'elle constitue l'un des premiers exemples célèbres de fonction calculable qui n'est pas récursive primitive, démontrant ainsi les limites de certaines classes de fonctions mathématiques. Pour les programmeurs, elle représente un excellent exercice permettant de comprendre le fonctionnement des appels récursifs imbriqués et les conséquences qu'ils peuvent avoir sur la mémoire et les performances d'un programme. Le code source QuickBASIC/QBasic présenté ci-dessous illustre une implémentation directe et fidèle de cette fonction. Bien que l'exemple se limite volontairement à de petites valeurs des paramètres, afin d'éviter une explosion du nombre d'appels récursifs, il permet déjà d'observer la progression remarquable des résultats obtenus. En exécutant ce programme, vous pourrez constater comment une définition mathématique relativement courte est capable de générer des valeurs de plus en plus importantes, faisant de la fonction d'Ackermann un classique incontournable de l'informatique théorique, de la programmation récursive et de l'étude des fonctions à croissance extrêmement rapide.

Voici un code source QuickBASIC effectuant le calcul de la fonction d'«Ackermann» dans ses positions inférieures :

  1. DECLARE FUNCTION Ackermann! (M!, N!)
  2. FOR I = 1 TO 2
  3.  FOR J = 1 TO 10
  4.   PRINT "Ackermann(" + STR$(I) + "," + STR$(J) + ")="; Ackermann(I, J)
  5.  NEXT
  6. NEXT
  7.  
  8. FUNCTION Ackermann (M, N)
  9.  IF M = 0 THEN
  10.   Ackermann = N + 1
  11.  ELSE
  12.   IF N = 0 THEN
  13.    Ackermann = Ackermann(M - 1, 1)
  14.   ELSE
  15.    Ackermann = Ackermann(M - 1, (Ackermann(M, N - 1)))
  16.   END IF
  17.  END IF
  18. END FUNCTION

on obtiendra le résultat suivant :

Ackermann( 1, 1)= 3
Ackermann( 1, 2)= 4
Ackermann( 1, 3)= 5
Ackermann( 1, 4)= 6
Ackermann( 1, 5)= 7
Ackermann( 1, 6)= 8
Ackermann( 1, 7)= 9
Ackermann( 1, 8)= 10
Ackermann( 1, 9)= 11
Ackermann( 1, 10)= 12
Ackermann( 2, 1)= 5
Ackermann( 2, 2)= 7
Ackermann( 2, 3)= 9
Ackermann( 2, 4)= 11
Ackermann( 2, 5)= 13
Ackermann( 2, 6)= 15
Ackermann( 2, 7)= 17
Ackermann( 2, 8)= 19
Ackermann( 2, 9)= 21
Ackermann( 2, 10)= 23

Voir également

Science - Mathématique

Dernière mise à jour : Mercredi, le 14 septembre 2016