Le factorielle avec netbeans
Résolu
lyzalylyz
Messages postés
16
Statut
Membre
-
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;
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.-
-
Tu peux faire mentalement le calcul pour voir ce qui coince, par exemple 3 au départ :
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...
-
-
Bonjour essaye un peu ceci juste pour continuer dans ta logique
public static int factoriel (int x) {
if (x>=1){
return x* factoriel(x-1);
}
else{return x+1;}
}