IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Calcul de Factorielle


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 109
    Par défaut Calcul de Factorielle
    Bonjour à tous,

    Je débute ma formation en langage C et j'essaye de faire un programme me permettant de calculer la factorielle d'un nombre donnée, j'ai écrit le programme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdio.h>
     
     
        int facto(int x) {
            if (x==1) {
                      return 1;
                      }else{
                            facto(x-1)*x;
                            }
                            }
     
    int main(){
     
        int n;
         printf("entrez un nombre : ");
        scanf("%d",&n);
        printf("facto(%d)  = %d \n",n,facto(n));
        system("pause");
    }



    Or lorsque je rentre un chiffre différent de 1 la factorielle n'est pas calculée...pk et d'où vient mon erreur?


    Merci pour vos réponses.

  2. #2
    Scorpi0
    Invité(e)
    Par défaut
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
      int facto(int x) {
            if (x==1) {
                      return 1;
                      }else{
                            return facto(x-1)*x;
                       }
    }
    
    int main(){
       
        int n;
         printf("entrez un nombre : ");
        scanf("%d",&n);
        printf("facto(%d)  = %d \n",n,facto(n));
        system("pause");
    }

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 109
    Par défaut
    Merci! Je n'avais pas fait attention à sa :s

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Citation Envoyé par adam974 Voir le message
    Merci! Je n'avais pas fait attention à sa :s
    À ça non plus, visiblement :-) (hint : le « ç » se trouve sur la touche 9).

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    08-12-04-1.c: In function `facto':
    08-12-04-1.c:11: warning: control reaches end of non-void function
    EDIT
    pff trop lent...

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Gai,

    L'utilisation de la récursivité est totalement superflue pour un tel calcul.

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par droggo Voir le message
    L'utilisation de la récursivité est totalement superflue pour un tel calcul.
    Et risqué puisse la taille de la pile n'est pas infinie.
    Et limité puisse que 21! dépasse la taille d'un non signé 64 bits.

    Mais quel meilleur exemple pour aborder la récursivité ?

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hie,
    Citation Envoyé par mabu Voir le message
    Mais quel meilleur exemple pour aborder la récursivité ?
    Si tu trouves qu'un exemple où elle est inutile est le meilleur moyen pour aborder la récursivité... après on s'étonne que les débutants cherchent à en coller de partout.

    De meilleurs exemples, il y a en des tas. Les tours de Hanoi, par exemple. (Dont bien entendu on peut faire des solveurs sans récursivité, mais c'est un exemple où celle-ci se présente naturellement : c'est généralement la première manière de résoudre le problème à sortir de la réflexion, même si les débutants ne comprennent pas vraiment à quoi ça correspond, ils voient bien qu'il y a une méthode répétitive.)

  9. #9
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par droggo Voir le message
    Si tu trouves qu'un exemple où elle est inutile est le meilleur moyen pour aborder la récursivité... après on s'étonne que les débutants cherchent à en coller de partout.
    Il fallait lire "[SARCASME]Mais quel meilleur exemple pour aborder la récursivité ; et apprendre à ne pas s'en servir ?[/SARCASME]".

    La récursivité, c'est bien, mais à mon avis peu adapté au c.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calculer la factorielle en java?
    Par inptiste1987 dans le forum Débuter avec Java
    Réponses: 20
    Dernier message: 07/11/2018, 23h02
  2. exception dans un calcul de factorielle
    Par ranell dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2007, 19h01
  3. Prog pour calculer la factorielle d'un nombre
    Par Lenezir dans le forum Langage
    Réponses: 2
    Dernier message: 11/05/2007, 09h42
  4. Calcul du factorielle
    Par knecmotet dans le forum C
    Réponses: 15
    Dernier message: 16/09/2005, 11h33
  5. fonction qui calcule la factorielle ?
    Par piff62 dans le forum C
    Réponses: 8
    Dernier message: 27/02/2005, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo