Le factorielle avec netbeans
Résolu
lyzalylyz
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
lyzalylyz -
lyzalylyz -
cc tout le monde svp si quelqu'un peut m'aider de savoir c quoi le pb de mon pgm je l'ai programmé en java en utilisons netbeans sur 1 factorielle d'un nombre donné lors de son execution il m'affiche le msg suivant Exception in thread "main" java.lang.StackOverflowError
at factoriel.factoriel(factoriel.java:6)
voici le pgm que j ai fait :
et merci d'avance;
at factoriel.factoriel(factoriel.java:6)
voici le pgm que j ai fait :
import java.util.*; public class factoriel { public static int factoriel (int x) { return x* factoriel(x-1); } public static void main (String []args){ System.out.println("donner la valeur de x :"); Scanner d=new Scanner(System.in); int x= d.nextInt(); int z = factoriel(x); System.out.println("la valeur du factorielle du x est:" +z); } }
et merci d'avance;
A voir également:
- Factorielle sur calculatrice ti 82
- Installer calculatrice sur mon portable - Télécharger - Calcul & Conversion
- Calculatrice gratuit - Télécharger - Calcul & Conversion
- Comment calculer la moyenne sur excel - Guide
- Comment éteindre une calculatrice ti collège plus ✓ - Forum calculatrices
- Factorielle ti 83 - Forum Matériel & Système
2 réponses
Bonjour,
Le problème c'est que tu ne t'arrêtes jamais.
Dans factoriel(x) tu appelles factoriel(x-1), qui appelle x-2, puis x-3 etc.
Si tu avais fait une boucle (for ou while) ton programme ne s'arrêterait jamais, mais ici puisque tu fais des appels récursifs il y a une pile d'appels qui s'accumule, jusqu'à ce qu'elle soit pleine (sa taille doit être de 1024) et là ça provoque une StackOverflowError.
Le problème c'est que tu ne t'arrêtes jamais.
Dans factoriel(x) tu appelles factoriel(x-1), qui appelle x-2, puis x-3 etc.
Si tu avais fait une boucle (for ou while) ton programme ne s'arrêterait jamais, mais ici puisque tu fais des appels récursifs il y a une pile d'appels qui s'accumule, jusqu'à ce qu'elle soit pleine (sa taille doit être de 1024) et là ça provoque une StackOverflowError.
factoriel(3) = 3 * factoriel(2)
Il faut donc calculer factoriel(2) avant de pouvoir faire le produit :
factoriel(2) = 2 * factoriel(1)
factoriel(1) = 1 * factoriel(0)
factoriel(0) = 0 * factoriel(-1)
factoriel(-1) = -1 * factoriel(-2)
etc.
Il faut que tu rajoutes de la connaissance à ton algorithme, pour l'instant il n'y a que des règles de passage d'un cas à un autre, mais il n'y a aucune valeur qui permet de débloquer le calcul. Du coup Java continue bêtement...