Le factorielle avec netbeans

Résolu/Fermé
lyzalylyz Messages postés 14 Date d'inscription mardi 10 mars 2015 Statut Membre Dernière intervention 14 mars 2016 - Modifié par KX le 10/03/2015 à 09:16
 lyzalylyz - 14 mars 2015 à 14:53
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 :

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

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mars 2015 à 09:20
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.
0
lyzalylyz Messages postés 14 Date d'inscription mardi 10 mars 2015 Statut Membre Dernière intervention 14 mars 2016
10 mars 2015 à 17:08
merci pour ton aide,mais vrm je sais pas comment le regler,si vous avez une solution proposé là svp,merci
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mars 2015 à 18:08
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...
0
yamdjio Messages postés 88 Date d'inscription lundi 18 août 2014 Statut Membre Dernière intervention 21 mai 2015 5
14 mars 2015 à 14:32
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;}
}
0
cc ,merci enrm ,enfin a marché et en + aujourd'hui je les montré à 1e prof de java elle m a dit que ya pas de fonction(methode) réciproque ds netbeans,merci.
0