Factorielle
hamzahb
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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
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
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.