Rechercher : dans
Par :

Explication en c++

Dernière réponse le 21 jui 2004 à 10:26:02 eric, le 20 jui 2004 à 18:24:40 
 Signaler ce message aux modérateurs

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..

Meilleures réponses pour « explication en c++ » dans :
Mythe - Il existe des logiciels pour enlever la voix d'un MP3 Voir Mythe Il existe un logiciel pour enlever les paroles d'une musique afin de l'utiliser pour un karaoke. Réalité VRAI et FAUX Explications C'est possible théoriquement et dépendamment de comment la chanson a été enregistrée, et pas besoin de...
Gagner 25€ par email Voir Mythe Il y a de bons plans sur internet pour gagner 25€ par email. (ou plus généralement: Il y a de bon plans sur internet pour gagner de l'argent sans bouger le cul de sa chaise). Réalité FAUX Explications C'est l'arnaque classique de la...
Vider le dossier prefetch pour accélérer Windows VoirMythe Il est utile de purger régulièrement le dossier prefetch: Cela accélère Windows. Réalité FAUX. Explications Il faut bien comprendre à quoi sert le dossier prefetch (C:\WINDOWS\Prefetch): Lorsque vous lancez un programme, il fait:...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
[Dico] Dictionnaires - Définitions - Extensions VoirAlors que vous êtes en plein boulot sur votre computeur, n’avez-vous jamais eu besoin de la définition ou de l’orthographe d’un mot ? D’une explication ou de la traduction d’un terme informatique ? Et ces “.com”, ou “.bmp”, qu’est-ce que c’est que...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...

1

Kermitt31, le 20 jui 2004 à 18:37:56
  • +1

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 ???

Répondre à Kermitt31

6

nabbla, le 20 jui 2004 à 19:14:41

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

Répondre à nabbla

2

nabbla, le 20 jui 2004 à 18:39:49

Tu as tout compris 5! = 120


DURALEX SED LEX

Répondre à nabbla

3

eric17m, le 20 jui 2004 à 18:55:47

Je te remerci bcps, @+

Répondre à eric17m

4

eric17m, le 20 jui 2004 à 19:00:23

Pkoi faut il renvoyer la factorielle à 0.!!

Répondre à eric17m

5

nabbla, le 20 jui 2004 à 19:05:43
  • +1

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

Répondre à nabbla

7

Must41, le 21 jui 2004 à 01:58:53

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

Répondre à Must41

8

Kermitt31, le 21 jui 2004 à 09:19:11

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
}

Répondre à Kermitt31

9

pom, le 21 jui 2004 à 10:15:26

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

Répondre à pom

10

 Kermitt31, le 21 jui 2004 à 10:26:02

Après tu peux trouver plein d'exmples sur le web...

Répondre à Kermitt31