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
Bonjour,
pouvez vous me dire pk le resultat est toujours 1.0 !
ce sont 52 fonctions de factorielle , une harmonique et l'autre récursive


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
Bonjour, pour plus de lisibilité merci de poster le code en utilisant la coloration syntaxique.
0
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
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.
0