Exercice factorielle sur la récursivité JAVA
Rédigé par Salim KHALIL, Publié le 17 Août 2010, Mise à jour le Lundi, 31 Août 2020 11:15But:
Calcul récursif et itératif de la factorielle de n.
Récursivité
Pour calculer n! (factorielle n), on peut utiliser deux formules différentes :
- La formule itérative :
n! = 1 * 2 * 3 * ... * n |
- La formule récursive définissant n! en fonction de
(n-1)! :
0! (factorielle de zéro) = 1 |
pour tout entier n>0, n! = n * (n-1)! |
Dans le fichier Factorielle.java, définissez deux méthodes factorielleRecursive et factorielleIterative implémentant les deux méthodes de calcul décrites précédemment. La calcul devra se faire sur des entiers compris entre 0 et 12 introduits par l'utilisateur. Une méthode demanderNombre redemandera le nombre à l'utilisateur tant que celui-ci ne sera pas compris dans l'intervalle souhaité.
Implémentez ensuite la méthode main qui demandera un nombre à l'utilisateur et calculera la factorielle de ce nombre des deux manière possibles.
Pour terminer, ajouter une boucle demandant à l'utilisateur s'il souhaite recommencer.
Exemple de déroulement
Entrez un nombre entier compris entre 0 et 12 : 12 Méthode itérative : 12! = 479001600 Méthode récursive : 12! = 479001600 Voulez-vous recommencer [o/n] ? o Entrez un nombre entier compris entre 0 et 12 : 6 Méthode itérative : 6! = 720 Méthode récursive : 6! = 720 Voulez-vous recommencer [o/n] ? n
Factorielle.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
import java.util.Scanner; class Factorielle { private static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { char recommencer = 'o'; do { int n = demanderNombre(); System.out.println("Méthode itérative :"); System.out.println(n + "! = " + factorielleIterative(n)); System.out.println("Méthode recursive :"); System.out.println(n + "! = " + factorielleRecursive(n)); System.out.println("Voulez-vous recommencer [o/n] ?"); recommencer = scanner.next().charAt(0); } while (recommencer == 'o'); } /** * Demande un entier à l'utilisateur * @return L'entier entré par l'utilisateur */ static int demanderNombre() { int n; do { System.out.println("Donnez un nombre entier compris entre 0 et 12 (compris)"); n = scanner.nextInt(); } while ((n > 12) || (n < 0)); return n; } /** * Calcul de la factorielle par la méthode itérative * @param nombre Le nombre dont on veut calculer la factorielle * @return nombre! */ static int factorielleIterative(int nombre) { int fact = 1; for (int i = 2; i <= nombre; i++) { fact *= i; } return fact; } /** * Calcul de la factorielle par la méthode récursive * @param nombre Le nombre dont on veut calculer la factorielle * @return nombre! */ static int factorielleRecursive(int nombre) { if (nombre == 0) { return 1; } else { return (nombre * factorielleRecursive(nombre - 1)); } } } |