Posez votre question Signaler

Explication en c++

eric - Dernière réponse le 21 jui 2004 à 10:26
Bonjour à tous

Voilà quelqu'un pourrait il m'aider à résoudre cela:

int factorielle ( int n )
{
if ( n==1)
return 1;
else
return (n * factoriel ( n -1) ) ;
}


1)voilà je ne vois pas comment; Expliquer comment s'effectue le traitement de la factorielle de 5 à partir de la fonction précédente?

2) Quel est le résultat obtenu?



je pense que la fonction précédente est un de ces exemples:

1) Exemple classique, la factorielle d'un nombre entier symbolisée par le signe" ! " et ainsi définie :
0 ! = 1
1 ! = 1
2 ! = 1*2 = 2
3 ! = 1*2*3 = 6, etc

2) Exemple de fonction récursive.

2 ! = 1 ! * 2
3 ! = 2 ! * 3, etc



Donc si j'ai bien compris la factoriel de 5 est:

0 ! = 1
1 ! = 1
2 ! = 1*2 = 2
3 ! = 1*2*3 = 6
4 ! = 1*2*3*4 = 24
5 ! =1*2*3*4*5 = 120

et le résultat 120 ???????

si ce n'est pas cela veuillez me l'expliquer, car je n'ais que sa dans mes cours!!

Merci d'avance..
Lire la suite 

Explication en c++ »

10 réponses
Réponse
+1
moins plus
c cela !
Mais par contre dans le if tu devrais mettre plutot
if(n>=0 && n<=1) car que va tu renvoyer pour la factorielle de 0 ???
nabbla - 20 jui 2004 à 19:14
moi je rajouterai plutot la ligne
if (n==0 || n== 1) car les valeur de n sont des entiers, mais ca revient au même.

DURALEX SED LEX
Ajouter un commentaire
Réponse
+1
moins plus
dans ton code tu doit definir le cas ou n=0
par convention 0! = 1
tu doit le préciser dans ton code!

DURALEX SED LEX
Ajouter un commentaire
Réponse
+0
moins plus
tu as tout compris 5! = 120


DURALEX SED LEX
Ajouter un commentaire
Réponse
+0
moins plus
je te remerci bcps, @+
Ajouter un commentaire
Réponse
+0
moins plus
pkoi faut il renvoyer la factorielle à 0.!!
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour
tu as compris mais j'ai preferé que tu ecrivais
5 ! = 5*4 !
4 ! = 4*3 !
3 ! = 3*2 !
2 ! = 2*1 !
1!=1
lorsque le compilateur arrive au stade ou le calul est final càd 1 ! dans ce cas le calul n'est pas dependant de la fonction factoriel elle meme là il s'arrete pour remonter clculer 2 ! puis 3 ! etc...
aussi il faut faire attention au depassement de capacité OverFlow
Ajouter un commentaire
Réponse
+0
moins plus
Must41 a tout a fait raison !
Pour le bout de code du if que je t'ai dit de changer c'est effectivement pour renvoyer factorille 0 si il y a besoin qui par convention vaut 1.
D'ailleurs il faudrait mieux faire un truc du style
int factorielle ( int n )
{
if (n>=0)
{
if ( n<=1)
return 1;
else
return (n * factoriel ( n -1) ) ;
}
else
return -1; //erreur car la factorielle d'un nombre negatif n'est pas definie
}
Ajouter un commentaire
Réponse
+0
moins plus
salut, si tu compiles, fais attention car une fois tu écris factorielle et une autre fois tu écris factoriel

attention à ce que n ne soit pas négatif.

Must41 a parlé d'overflow.
Amuse toi à calculer factorielle(100) de manière récursive puis itérative. Regarde le temps de calcul et la mémoire utilisée.

Si tu veux t'entrainer sur les fonctions récursives, code la fonction puissance (dans un 1e temps puissance ou l'exposant est un nombre entier).

Pom
Ajouter un commentaire
Réponse
+0
moins plus
Après tu peux trouver plein d'exmples sur le web...
Ajouter un commentaire
Ce document intitulé « explication en c++ » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook