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
A voir également:

13 réponses

hamzafes Messages postés 258 Statut Membre 54
 
avec quel langage???
0
marytahri Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
language c
0
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
marytahri Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
merci bcp c est tres gentil
0
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
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
marytahri Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
ok merci je vais essaie
0
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
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
hamzafes Messages postés 258 Statut Membre 54
 
oui je suis d’accord, en fait l'énoncé n'est pas assez clair
0
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
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