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, occupe une place particulière dans l'histoire des mathématiques et de l'informatique théorique. Cette fonction est devenue l'un des exemples les plus connus lorsqu'il s'agit d'illustrer la puissance et les limites de la récursivité. Sa particularité réside dans sa croissance extrêmement rapide : même avec des valeurs relativement modestes en entrée, le résultat obtenu peut devenir gigantesque en très peu d'étapes. Lorsque le premier paramètre augmente, la fonction croît beaucoup plus rapidement qu'une simple exponentielle, ce qui en fait un sujet fascinant pour les mathématiciens et les programmeurs.

La fonction d'Ackermann est souvent présentée dans les ouvrages consacrés aux algorithmes, à la théorie de la calculabilité et à la programmation récursive. Elle sert fréquemment d'exemple pour démontrer qu'il existe des fonctions calculables dont la croissance dépasse largement celle des fonctions arithmétiques classiques. Pourtant, malgré la popularité de sa formule, le nom de son créateur est parfois moins connu que la fonction elle-même, ce qui constitue un curieux paradoxe dans l'histoire des sciences.

Du point de vue de la programmation, la fonction d'Ackermann représente également un excellent exercice permettant de comprendre le fonctionnement des appels récursifs imbriqués. Chaque calcul peut entraîner plusieurs nouveaux appels de la fonction, lesquels génèrent à leur tour d'autres calculs. Cette cascade d'exécutions permet de mettre en évidence le rôle de la pile d'appels et les limites pratiques imposées par la mémoire disponible. C'est pourquoi les exemples présentés utilisent généralement des valeurs relativement petites afin d'éviter des temps de calcul excessifs ou des débordements de pile.

Le programme Delphi présenté ci-dessous illustre une implémentation classique de cette fonction récursive. Les exemples choisis se limitent volontairement aux premières valeurs de M et de N, ce qui permet d'observer son comportement sans provoquer une explosion du nombre d'appels récursifs. À l'aide de ce code source Delphi, vous pourrez ainsi découvrir l'une des fonctions mathématiques les plus célèbres de l'informatique théorique et comprendre pourquoi elle demeure encore aujourd'hui un sujet d'étude incontournable dans les ouvrages de mathématiques et d'algorithmique.

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

  1. Program AckermannExample;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. Uses SysUtils;
  6.      
  7. Function Ackermann(M,N:Integer):Integer;Begin
  8.  If M = 0 Then Begin
  9.   Ackermann:=N + 1;
  10.  End
  11.   Else
  12.  Begin
  13.   If N = 0 Then Ackermann:=Ackermann(M-1,1)
  14.            Else Ackermann:=Ackermann(M-1,(Ackermann(M,N-1)));
  15.  End;
  16. End;
  17.      
  18. Var
  19.  I,J:Byte;
  20.      
  21. BEGIN
  22.  For I := 1 to 2 do Begin
  23.   For J := 1 to 10 do Begin
  24.    WriteLn('Ackermann(',I,',',J,')=',Ackermann(I, J));
  25.   End;
  26.  End;
  27. END.

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 : Dimanche, le 17 août 2014