La fabuleuse fonction d'«Ackermann» de 1926, laquelle, lorsqu'on met des chiffres de plus en plus gros dans le premier paramètre, augmente beaucoup plus vite que l'exponentiel ! Sa formule est cité dans presque tous les livres de récursivité, mais paradoxalement, son nom, Wilhelm Ackermann, est difficile à trouver ! Voici un code source PL/1 effectuant le calcul de la fonction d'«Ackermann» dans ses positions inférieures :
- Corps: PROC options(main);
- DCL (i,j) fixed;
- DO i = 1 to 2;
- DO j = 1 to 10;
- display ('Ackermann(' || i || ',' || j || ')=' ||
- Ackermn(i, j));
- END;
- END;
- END Corps;
-
- Ackermn: PROC(m,n) RETURNS(fixed) recursive;
- DCL (m,n) fixed;
- IF m = 0 THEN DO;
- RETURN(n+1);
- END;
- ELSE
- DO;
- IF n = 0 THEN DO;
- RETURN(Ackermn(m-1,1));
- END;
- ELSE
- DO;
- RETURN(Ackermn(m-1,Ackermn(m,n-1)));
- END;
- END;
- END Ackermn;
on obtiendra le résultat suivant :
Ackermann( 1, 1)= 3Ackermann( 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
Dernière mise à jour : Mercredi, le 15 octobre 2014