Problem d'une fonction recursive

marytahri Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
Phortitou Messages postés 231 Statut Membre -
Bonjour,
j ai un probleme d'informatique s il vous plait aidez moi si c'est possible.
ecrivez une fonction puissance recursive qui calcule XpuissanceN pourX flottant quelconque et N entier positif ou nul. mettez à profit la remarque:
1,sin=0
X*Xpuis(N-1) si N est impair;
Xcarré puis N/2 si N est pair N/2 est entier
Configuration: Windows XP
Internet Explorer 7.0

13 réponses

  1. hamzafes Messages postés 258 Statut Membre 54
     
    avec quel langage???
    0
  2. marytahri Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
     
    language c
    0
  3. hamzafes Messages postés 258 Statut Membre 54
     
    float puissance(float x, int n)
    {

    if(n>0)
    return x*puissance(x, n-1);
    else
    return 1;

    }

    Pour les remarques c'est pas trop clair
    0
  4. Phortitou Messages postés 231 Statut Membre 27
     
    D'abord, vérifie si le nombre N est pair ou impair, puis fait une boucle qui multiplie N fois X avec lui-même

    double puis(int N, double X) {

    if(N == 1) {
    return X;
    } else {
    if(N%2 != 0) {
    for(i < N) {
    X = X*puis(N-1,X);
    }
    } else {
    for(i < N) {
    X = X*X*puis(N/2,X);
    }
    }
    }

    Je l'imagine un peu comme ça. Fais pas attention à la syntaxe et il y a surement des fautes, j'ai fait ça en vitesse selon ce que j'avais en tête. Si c'est pas ce que tu veux, fais signe et j'y reréfléchirai.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. marytahri Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
     
    merci bcp c est tres gentil
    0
  7. hamzafes Messages postés 258 Statut Membre 54
     
    si vous donniez un exemple simple, ça serait plus facile à comprendre.
    par exp n = 5 puis n =4
    décrivez les étapes pour chaque cas
    0
  8. Phortitou Messages postés 231 Statut Membre 27
     
    Mmmh... en fait j'ai mis les boucle parce que j'ai oublié que c'était la récursivité. Enlève les boucles for! Essaie plutot ceci:

    double puis(int N, double X) {

    if(N == 1) {
    return X;
    } else {
    if(N%2 != 0) {
    X = X*puis(N-1,X);
    } else {
    X = X*X*puis(N/2,X);
    }
    }
    0
  9. marytahri Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
     
    ok merci je vais essaie
    0
  10. hamzafes Messages postés 258 Statut Membre 54
     
    Bon si on veut à chaque itération diminuer n de 1 pour le cas impair et de la moitié dans le cas pair, je pense que c'est comme ça.:

    double puissance(int N, double X) {

    if(N == 1)
    {
    return X;
    }
    else if(N%2 != 0)
    {
    return X*puissance(N-1,X);
    }
    else
    {
    return X*puissance(N/2,X);
    }

    }
    0
  11. Phortitou Messages postés 231 Statut Membre 27
     
    Euh... quand N est pair, on doit faire (X*X)puissance(N/2) ?
    Dans ce cas il faut modifier:
    } else {
    X = X*X*puis(N/2,X);
    }

    par:

    } else {
    X = puis(N/2,X*X);
    }
    0
  12. hamzafes Messages postés 258 Statut Membre 54
     
    oui je suis d’accord, en fait l'énoncé n'est pas assez clair
    0
  13. marytahri Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
     
    merci bcp phortitou
    pouvez-vous me rendre ce programme en pointeur si tu as du temps bien sure s il vous plait
    0
  14. Phortitou Messages postés 231 Statut Membre 27
     
    En pointeur? Tu veux pouvoir donner une variable en paramètre et qu'elle soit modifiée par le programme?
    0