Exercice factorielle sur la récursivité JAVA
But:
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 : 12Méthode itérative : 12! = 479001600Méthode récursive : 12! = 479001600Voulez-vous recommencer [o/n] ? oEntrez un nombre entier compris entre 0 et 12 : 6Méthode itérative : 6! = 720Méthode récursive : 6! = 720Voulez-vous recommencer [o/n] ? nFactorielle.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | 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)); } }} |