Gladir.com - PL/1 - Mathématique - Ackermann


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)= 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: Vendredi, le 10 mars 2006