Problem d'une fonction recursive

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. 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
    1. 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.
      1. 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
        1. 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);
          }
          }
          1. 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);
            }

            }
            1. 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);
              }
              1. merci bcp phortitou
                pouvez-vous me rendre ce programme en pointeur si tu as du temps bien sure s il vous plait
                1. En pointeur? Tu veux pouvoir donner une variable en paramètre et qu'elle soit modifiée par le programme?