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
lyzalylyz - 14 mars 2015 à 14:53
A voir également:
- Factorielle sur calculatrice ti 82
- Installer calculatrice sur mon portable - Télécharger - Calcul & Conversion
- Comment calculer la moyenne sur excel - Guide
- Calculatrice gratuit - Télécharger - Calcul & Conversion
- Factorielle calculatrice casio - Forum calculatrices
- Ma-calculatrice - Télécharger - Calcul & Conversion
2 réponses
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
10 mars 2015 à 09:20
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.
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.
yamdjio
Messages postés
90
Date d'inscription
lundi 18 août 2014
Statut
Membre
Dernière intervention
21 mai 2015
5
14 mars 2015 à 14:32
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;}
}
10 mars 2015 à 17:08
10 mars 2015 à 18:08
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...