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