Problem d'une fonction recursive

Fermé
marytahri Messages postés 8 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 11 décembre 2008 - 11 déc. 2008 à 21:42
Phortitou Messages postés 221 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 4 décembre 2011 - 12 déc. 2008 à 08:28
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

13 réponses

hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 54
11 déc. 2008 à 22:29
avec quel langage???
0
marytahri Messages postés 8 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 11 décembre 2008
11 déc. 2008 à 22:30
language c
0
hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 54
11 déc. 2008 à 22:35
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 221 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 4 décembre 2011 27
11 déc. 2008 à 22:36
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 jeudi 11 décembre 2008 Statut Membre Dernière intervention 11 décembre 2008
11 déc. 2008 à 22:41
merci bcp c est tres gentil
0
hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 54
11 déc. 2008 à 22:42
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 221 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 4 décembre 2011 27
11 déc. 2008 à 22:43
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 jeudi 11 décembre 2008 Statut Membre Dernière intervention 11 décembre 2008
11 déc. 2008 à 22:45
ok merci je vais essaie
0
hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 54
11 déc. 2008 à 22:49
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 221 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 4 décembre 2011 27
11 déc. 2008 à 22:51
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 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 54
11 déc. 2008 à 22:56
oui je suis d’accord, en fait l'énoncé n'est pas assez clair
0
marytahri Messages postés 8 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 11 décembre 2008
11 déc. 2008 à 22:56
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 221 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 4 décembre 2011 27
12 déc. 2008 à 08:28
En pointeur? Tu veux pouvoir donner une variable en paramètre et qu'elle soit modifiée par le programme?
0