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 :

Nombre de Catalan


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut Nombre de Catalan
    Bonjour ,

    Je dois créer une fonction qui calcule les nombres de Catalan de façon récursive à partir de cette formule http://upload.wikimedia.org/math/b/a...e376993a27.png

    J'ai déjà essayé de la créer mais je n'y arrive pas

    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
    20
    21
    22
    23
    void catalan (int solution[],int taille)
    {
        int k=0,l=1,somme=0;
        solution[0]=1;
        /*
        solution[1]=solution[0]*solution[0];
        solution[2]=solution[0]*solution[1]+solution[1]*solution[0];
        solution[3]=solution[0]*solution[2]+solution[1]*solution[1]+solution[2]*solution[0];
        solution[4]=solution[0]*solution[3]+solution[1]*solution[2]+solution[2]*solution[1]+solution[3]*solution[0];*/
     
     
        for (int i=1;i<=taille-1;i++)
        {
     
            somme+=solution[k]*solution[i-l];
            k++;
            l++;
            solution[i]=somme;
     
        }
        affichageVecteurDEntier(solution,taille);
     
    }
    pour le moment , j'ai ce code mais ça ne fonctionne pas , et je ne vois pas de quelle façon résoudre mon problème.

    Une idée ?

    merci.

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Salut,

    Ton lien ne fonctionne pas. Est-ce la même chose que le nombre de Catalan décrit ici?
    Citation Envoyé par pazze
    j'ai ce code mais ça ne fonctionne pas
    Qu'entends-tu par là? Tu as des erreurs? Des plantages?
    Est-ce un problème de codage C++ que tu rencontres ou est-ce un problème d'adaptation de l'algorithme?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut
    Le lien devrait marcher maintenant.

    en fait , je n'arrive pas à trouver la bonne suite.
    Je crois que c'est un problème d'adaptation de l'algorithme .

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Déjà, si tu dois effectuer un traitement récursif, il faudrait peut etre utiliser une fonction... récursive

    En programmation, une fonction est dite récursive quand... elle s'appelle elle-même

    Pour sortir de cet appel qui pourrait, si les capacités de l'ordinateur le permettaient, durer jusqu'au jugement dernier, il y a lieu de tester ce que l'on appelle "le cas de base", qui, typiquement, renvoie 1 ou 0 (ici, le cas de base est C0 qui renvoie 1), et de veiller, en dehors de ce cas de base, à rappeler la fonction de manière à tendre vers ce cas de base.

    Ainsi, et bien que la récursivité ne soit clairement pas la meilleure solution pour ce calcul précis, tu pourrais envisager une fonction récursive qui calcule la factorielle d'un nombre comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int factorielle( int i)
    {
        /*le cas de base : si i = 1, on renvoie 1 */
        if(i == 1)
            return 1;
        /* dans tous les autres cas, on appelle la fonction en faisant en sorte
         * que i tende vers 1, mais en respectant le principe de la factorielle
         */
        return i*factorielle(i-1);
    }
    (je sais, il y a quantité d'autres exemples qui auraient pu servir à meilleur escient, mais je suis un peu fatigué , et au moins, ca permettra de comprendre l'idée )

    Maintenant que tu as (je l'espere) compris le principe, "YAPUKA" l'adapter à ton problème de calcul des nombres catalans
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut
    Le problème , c'est que je dois utiliser une fonction void qui reçoit un vecteur et sa taille. Et je dois faire tout les calculs dans ce même vecteur.

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Ca peut aussi fonctionner avec une fonction qui ne renvoie rien... le tout étant que la fonction ne soit pas rappelée une fois le cas de base atteind

    Cela pourrait donner quelque chose comme
    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
    void Catalant(int* tab, int size)
    {
        /* testons le cas de base */
        if(size==0)
        {
            tab[0]= 1;
        }
        else
        {
            /*remplir le tableau en tendant vers un size == 0 
             * avec les appels à Catalan ici
             */
     
        }
    }
    Lorsque je parle du retour de la fonction, cela peut aussi impliquer qu'elle ne se rappelle simplement pas elle-même
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. nombres de catalan en iteratif
    Par annamir dans le forum Débuter
    Réponses: 2
    Dernier message: 24/03/2009, 22h07
  2. nombre de catalans
    Par kassimsajid dans le forum C
    Réponses: 2
    Dernier message: 20/03/2007, 10h44
  3. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31
  4. Nombre de fichiers ouverts simultanément
    Par matrixfan dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/05/2002, 17h47
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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