begin process at 2012 05 27 16:14:27
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > FACTORIELLE PAR RECCURRENCE !

FACTORIELLE PAR RECCURRENCE !


 Information sur la source

Note :
5 / 10 - par 1 personne
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Débutant Date de création :10/06/2003 Date de mise à jour :10/06/2003 14:19:39 Vu :2 585

Auteur : JCDjcd

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note


 Description

On calcul les factorielles des arguments passer dans le 'main'.


Source

  • #include <stdio.h> // printf
  • #include <conio.h> // getch
  • #include <stdlib.h> // atoi
  • // n! = 1*2*3*4*...*(n-1)*n
  • // donc: n! = n * ((n-1)!). (par convention : 0! = 1)
  • // donc par reccurrence, on a l'algorithme suivant:
  • unsigned Factorielle(unsigned n)
  • {
  • return n == 0 ? 1 : n * Factorielle(n - 1);
  • }
  • // caclul les factorielle des arguments,exemple:
  • // "prgm 0 1 5 10 13" calcul 0!,1!,5!,10!,et 13!.
  • // et donne : 1,1,120,3628800,---OVERFLOW---.
  • int main(int argc,char **argv)
  • {
  • // s'il n'y a pas d'arguments :
  • // argc=0 et *argv="C:\...\main.c"
  • while(--argc)
  • {
  • unsigned n;
  • n = atoi( (*(++argv)));
  • printf("%12u! = ",n);
  • // on peut calculer jusqu'a 12!
  • if(n > 12) printf("--- OVERFLOW --- (max. : 12!)\n");
  • else printf("%u\n",Factorielle(n));
  • }
  • getch();
  • return 0;
  • }
#include <stdio.h>    // printf
#include <conio.h>    // getch
#include <stdlib.h>   // atoi
// n! = 1*2*3*4*...*(n-1)*n
// donc: n! = n * ((n-1)!). (par convention : 0! = 1)
// donc par reccurrence, on a l'algorithme suivant:
unsigned Factorielle(unsigned n)
{
return n == 0 ? 1 : n * Factorielle(n - 1);
}
// caclul les factorielle des arguments,exemple:
// "prgm 0 1 5 10 13" calcul 0!,1!,5!,10!,et 13!.
// et donne : 1,1,120,3628800,---OVERFLOW---.
int main(int argc,char **argv)
{
// s'il n'y a pas d'arguments : 
// argc=0 et *argv="C:\...\main.c"
while(--argc)
  {
  unsigned n;
  n = atoi( (*(++argv)));
  printf("%12u! = ",n);
  // on peut calculer jusqu'a 12!
  if(n > 12)  printf("--- OVERFLOW --- (max. : 12!)\n");
  else        printf("%u\n",Factorielle(n));
  }
getch();
return 0;
}

 Conclusion

Les commentaires sont les bien venus !
Voici quelques questions que je me pose :
* Comment raccourcir ce code ?
* Comment gerer l'OVERFLOW differemment ?
* Comment faire un code plus rapide ?


 Sources du même auteur

Source avec Zip Source avec une capture COLORATION SYNTAXIQUE
Source avec Zip Source avec une capture ORBITES DES SATELLITES GPS
Source avec Zip Source avec une capture DESSIN D'ARBRES
Source avec Zip Source avec une capture PROGRAMMATION LINEAIRE
Source avec Zip EXTENSION DE CORPS (MATH)

 Sources de la même categorie

Source avec Zip KISIEL CD INFO DRIVE par kisiel0147852
Source avec une capture SUPPRESSION DES REDONDANCES DE FICHIERS par cyberntique
Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro

Commentaires et avis

Commentaire de payen le 10/06/2003 16:36:14

pour gerer l'overflow, je pense qu'il te suffit d'augmenter la taille de la pile ...

Commentaire de JCDjcd le 10/06/2003 20:48:21

Excuse moi :
pour l'OVERFLOW je parlait pas de la pile.
Mais   12! &lt; 2^32 &lt; 13!
Donc au dessus des valeurs 12, le resultat est faux =&gt; depassement (OVERFLOW !)

Mais a ce propos comment augment-on la taille de la pile ???

Commentaire de JCDjcd le 12/06/2003 08:40:00

J'ai fais une erreur dans les commentaires :
CORRECTION :
// s'il n'y a pas d'arguments :
// argc=1 et *argv="C:...main.c"
            ^
            ||
            ||
            ||
---------//

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales