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

Algorithmes et structures de données Discussion :

Rendre terminale une fonction récursive


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Par défaut Rendre terminale une fonction récursive
    Bonjour,

    J'ai la fonction récursive puissance qui calcule x à la puissance n en distinguant les deux cas: n est pair et n est impair.


    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
     
    int puis(int x, int n)
    {
       int y;
        if(n==0)
         { return 1;
         }
        else if(n%2==0)
             {
                 n=n/2;
                 y=puis(x,n);
                 return y*y;
             }
        else
        {
            n=n/2;
            y=puis(x,n);
            return x*y*y;
        }
    }
    Comment rendre cette fonction terminale?

    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Bonjour,

    et si tu essayais de rajouter un paramètre pour le résultat (technique classique) ?
    Par exemple avec un prototype comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void puiss(int x, int n, int *res);

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Par défaut
    Bonjour,
    Tu peux y mettre un compteur, et quand le compteur est "up" ou "down", tu sort de la boucle.

  4. #4
    Membre actif
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Par défaut
    Bonjour,

    Justement il faut rajouter un paramètre à la fonction récursive qui sera un accumulateur:
    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
     
     
    int puis(int x, int n, int y)
    {
     
        if(n==0)
         { return 1;
         }
        else if(n%2==0)
             {
                 n=n/2;
                 return puis(x,n,y*y);
             }
        else
        {
            n=n/2;
            return puis(x,n,x*y*y);
        }
    }

    Pourriez-vous m'aider à trouver le problème?

    Merci d'avance

  5. #5
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    as-tu bien lu le prototype que je t'ai proposé ?
    là ce n'est pas un problème d'algo mais plus de langage C … l'accumulateur doit «être passé par référence et non par copie pour pouvoir récupérer sa valeur modifiée».

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 104
    Par défaut
    Citation Envoyé par WhiteCrow Voir le message
    là ce n'est pas un problème d'algo mais plus de langage C … l'accumulateur doit «être passé par référence et non par copie pour pouvoir récupérer sa valeur modifiée».
    Ce n'est pas obligé, en partant du code de nadia85, on peut retourner la valeur qui nous intéresse (valeur finale de l'accumulateur) plutôt que de faire un paramètre par référence (qui est justement une notion dépendant du language).

    Citation Envoyé par nadia85 Voir le message
    Bonjour,

    Justement il faut rajouter un paramètre à la fonction récursive qui sera un accumulateur:
    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
     
     
    int puis(int x, int n, int y)
    {
     
        if(n==0)
         { return 1;
         }
        else if(n%2==0)
             {
                 n=n/2;
                 return puis(x,n,y*y);
             }
        else
        {
            n=n/2;
            return puis(x,n,x*y*y);
        }
    }

    Pourriez-vous m'aider à trouver le problème?
    Ben du coup la réponse est dans mon commentaire à WhiteCrow :p

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 08/04/2015, 18h59
  2. algorithme comportant une fonction récursive
    Par TraxX dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/02/2008, 16h09
  3. Réponses: 4
    Dernier message: 03/01/2008, 10h53
  4. [fonction d'Ackermann] Écrire une fonction récursive
    Par java+ dans le forum Mathématiques
    Réponses: 5
    Dernier message: 19/06/2007, 01h14
  5. Réponses: 6
    Dernier message: 24/05/2007, 17h18

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