/* Calcul de n! par methodes recursive          */
/* et iteratives                                */

public class FonctionsFactoriel {
  
//////////////////////////////////////////////////

/* Fonction de calcul et retour                 */
/* de n! par methode récursive                  */
/* Définition:                                  */
/*  - 0! = 1                                    */
/*  - n! = (n-1)!*n si n > 0                    */
/* n : valeur pour laquelle n! est calculé      */

  static long factorielRecursif(int n) {
    long res;
    if ( n == 0 ) {
      res = 1; }
      else {
      res = factorielRecursif(n-1)*n; }
    return res;
  }

/* Fonction de calcul et retour                 */
/* de n! par methode itérative                  */
/* Définition:                                  */
/*  - 0! = 1                                    */
/*  - n! = 1 * 2 * 3 * ... * n si n > 0         */
/* n : valeur pour laquelle n! est calculé      */

  static long factorielIteratif(int n) {
    long res = 1;
    if ( n > 1 ) {
      for ( int i = 2 ; i <= n ; i++ ) {
      res = res*i; }
    }
    return res;
  }

//////////////////////////////////////////////////
  
/* Programme principal                          */

  public static void main(String [] args) {
    int n;
    long factn;
    Ecran.afficher("Valeur ? ");
    n = Clavier.saisirInt();
    Ecran.afficherln(n,"! = ",factorielRecursif(n));
    Ecran.afficherln(n,"! = ",factorielIteratif(n));
  }
}