Factorielle
Fermé
hamzahb
Messages postés
3
Date d'inscription
mercredi 10 juin 2015
Statut
Membre
Dernière intervention
15 octobre 2015
-
15 oct. 2015 à 12:45
KX Messages postés 16727 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 2 décembre 2023 - 15 oct. 2015 à 19:51
KX Messages postés 16727 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 2 décembre 2023 - 15 oct. 2015 à 19:51
2 réponses
Whismeril
Messages postés
18813
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2023
917
15 oct. 2015 à 13:13
15 oct. 2015 à 13:13
Bonjour, pour plus de lisibilité merci de poster le code en utilisant la coloration syntaxique.
KX
Messages postés
16727
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 décembre 2023
3 012
15 oct. 2015 à 19:51
15 oct. 2015 à 19:51
Bonjour,
Comme mentionné par Whismeril, il est plus pratique d'avoir ton code source au format texte à l'aide des balises dédiées, sinon comment je fais pour tester ton code à partir d'une image ? Je ne vais pas tout recopîer...
Quelques remarques, en listant ton code.
Pour la première méthode :
i est un entier, donc i/valeur est une division entière (comme à l'école), mais puisque i vaut 1, i/valeur vaut soit 1 si valeur=1, soit 0 si valeur>1
Donc dans ta boucle tu fais toujours resultat + 0, sauf lorsque valeur=i où tu fais resultat+1 ce qui explique ton 1 final.
Remarque : puisque i vaut toujours 1 et ne change jamais il n'y a aucun intérêt d'utiliser une variable pour cela.
Pour corriger ton problème tu peux faire resultat + 1.0/valeur, puisque 1.0 est un double la division sera flottante et tu auras bien ce que tu veux.
Pour la deuxième méthode :
Tu multiplie fac par value, or fac vaut 0 au départ donc le produit fera toujours 0 et tu auras 0 à la fin...
Initialises fac à 1 au départ pour obtenir un résultat qui évolue.
Remarque : pourquoi tu fais une boucle for dans une méthode que tu dis être "récursive" ça n'a pas de sens. De plus ta boucle for est bizarrement construite, tu initialises j mais tu fais une condition et un décrément sur value, ce n'est jamais comme cela que l'on devrait faire.
Comme mentionné par Whismeril, il est plus pratique d'avoir ton code source au format texte à l'aide des balises dédiées, sinon comment je fais pour tester ton code à partir d'une image ? Je ne vais pas tout recopîer...
Quelques remarques, en listant ton code.
Pour la première méthode :
i est un entier, donc i/valeur est une division entière (comme à l'école), mais puisque i vaut 1, i/valeur vaut soit 1 si valeur=1, soit 0 si valeur>1
Donc dans ta boucle tu fais toujours resultat + 0, sauf lorsque valeur=i où tu fais resultat+1 ce qui explique ton 1 final.
Remarque : puisque i vaut toujours 1 et ne change jamais il n'y a aucun intérêt d'utiliser une variable pour cela.
Pour corriger ton problème tu peux faire resultat + 1.0/valeur, puisque 1.0 est un double la division sera flottante et tu auras bien ce que tu veux.
Pour la deuxième méthode :
Tu multiplie fac par value, or fac vaut 0 au départ donc le produit fera toujours 0 et tu auras 0 à la fin...
Initialises fac à 1 au départ pour obtenir un résultat qui évolue.
Remarque : pourquoi tu fais une boucle for dans une méthode que tu dis être "récursive" ça n'a pas de sens. De plus ta boucle for est bizarrement construite, tu initialises j mais tu fais une condition et un décrément sur value, ce n'est jamais comme cela que l'on devrait faire.