espanish
Messages postés7Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 2 mai 2006
-
2 mai 2006 à 13:37
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
3 mai 2006 à 00:26
bonjour a vous tous.
je suis entrain d'apprendre le c++ en solo c'est pas facile mais bon,j'aurai besoins d'aide sur deux questions ou je bute un peu merci e bien vouloir m'aider.
probleme:
int factorielle(int n )
{
if( n== 1)
return 1;
else
return (n * factorielle (n-1) );
}
mes deux question sont:
j'aimerais que l'on m'explique comment s'effectue le traitement de la factorielle de 5 à partir de la fonction précédente?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 2 mai 2006 à 14:07
Déja on remarque que ta fonction est fausse, car 0! devrait retourner 1, or ici je ne pense pas que ce soit le cas
Le fonctionnement est très simple à comprendre, ca s'appelle de la récursivité (fonction qui s'appelle elle même).
le résultat, ce sera 5*(4*(3*(2*1))), c'est a dire 120
Si tu comprends la définition mathématique de la factorielle, je pense que tu dois pas avoir de problème car c'est la même chose
espanish
Messages postés7Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 2 mai 2006 2 mai 2006 à 14:26
donc pour repondre a mes question.
qui sont.
question:
j'aimerai que l'on m'explique comment s'effectue le traitement de la factorielle de 5 à partir de la fonction précédente?
reponse: avec se que vous m'avez dit je c'est pas trop comment ecrire la reponse
question n2:
quel resultat vais-je obtenir?
reponse:
5*(4*(3*(2*1)) ce qui est egale a 120
voila si j'ai bien compris mais pour la question 1 je sait pas trop comment procede pour expliquer desole de ne pas trop comprendre mais apprendre tous seule c'est dur.
pour la question 2 je pense avoir compris je vous remerci de votre aide rapide
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 2 mai 2006 à 14:29
Si tu comprends ce qui se passe c'est pas compliqué d'expliquer. Tu obtiendra une bonne paraphrase du code source a mon avis (n ne vaut pas 1 donc on retourne 5 multiplié par le résultat de factorielle(4), ...)
Vous n’avez pas trouvé la réponse que vous recherchez ?
dark_naruto25
Messages postés127Date d'inscriptionmardi 23 août 2005StatutMembreDernière intervention 9 mai 2011 2 mai 2006 à 21:51
Salut, je viens de voir ton post.
Pour bien programmer, il faut réfléchir. Et là tout ce que tu fais
c'est nous bourré aux fesses pour qu'on te trouve des réponses à des
questions. Enfin bref, j'admets que certaines personnes ont du mal.
Je vais donc te dire un principe du récursif. Le but d'une fonction
récursive est de se rappelé elle même jusqu'à obtenir un problème
simple.
Prenons comme exemple (un qui me viens facilement à la tête), l'opération factorielle :-D
Par exemple, 5! = 5 * 4 * 3 * 2 * 1 Le plus simple de se calcul est 2*1, voire 1 tout court !
Il faut donc que la fonction se rappel tant que son paramètre n'est pas 1. On a déjà la ligne :
if( n==1 ) retrun 1;
Sinon il faut donc réduit le problème.
On est tous OK pour dire que 5! = 5* 4!, ce qui est une opération
simple puisque qu'il faut juste multiplié 5 par le factorielle (donc
rappelé la fonction). On a donc la ligne :
else return n*factorielle( n-1 );
Ce qui après la trace de l'algo donne :
factorielle( 5 ) --> 5*factorielle( 4 )
factorielle( 4 ) --> 4*factorielle( 3 )
factorielle( 3 ) --> 3*factorielle( 2 )
factorielle( 2 ) --> 2*factorielle( 1 )
factorielle( 1 ) --> 1
Il suffit donc de reparcourir ces quelques lignes de bas en haut et ça donne :
1 * 2 * 3 * 4 * 5 = 120
Si après ça tu ne comprends toujours pas, je propose que tu retourne à
l'école étudier, voire dans le cas extrême arreter la programmation.