Calculer l'exponentiel par récursivité

Résolu
ley100 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
 DemontePneus -
Bonjour,
S'il vous plaît, j'aimerais bien connaitre l'erreur(s) qui existe dans cette algorithme.
A titre d'information: cet algorithme a pour but de calculer l'exponentiel par méthode de récursivité.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int factoriel(int n, int i, int fact)
{
    if(i=n+1)
    {
        fact=1;
        return fact;
    }
    else
    {
        fact = fact*i;
        i++;
        factoriel(n,i,fact);
    }
}

float puissance(int n, int i, float x, float p)
{
    if(i=n+1)
    {
        p=1;
        return p;
    }
    else
    {
        p=p*x;
        i++;
        puissance(n,i,x,p);
    }
}

int main()
{
    const float EPS=0.0001;
    int i, n, fact;
    float x,p,s,T;

    printf("Donner x: ");
    scanf("%f", &x);
    n=0; T=1; s=0; fact=1; p=1;
    while(floor(T) > EPS)
    {
        T=puissance(n,1,x,p)/factoriel(n, 1, fact);
        s=s+T;
        n=n+1;
    }
    printf("Exp(%f) = %f\n", x, s);
}


MERCI pour votre aide.
            
            

5 réponses

ley100 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   3
 
Oui vous avez raison, merci pour toi père et pour Sylar44 aussi.
3
amjad63 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
je va envoyer le reponse en 3 jour inchaa alah
0
moncef
 
on dit je vais mesieur et pas je va
0
DemontePneus
 
On dit monsieur on dit pas mesieur @moncef #BouffonQuiPrendSesAises #TuConnaisRienAuFrançaisAlorsShutUpCallate
0
ley100 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   3
 
inchaa allah
0
le père
 
Bonjour

Plusieurs erreurs.

Je passe sur l'absurdité d'utiliser la récursivité pour calculer la factorielle et la puissance, je suppose qu'on te le demande.

D'abord, détail de syntaxe ultra classique : le test c'est ==, pas =. Dans tes deux fonctions il faut if(i==n+1)

Plus grave, dans le else de test deux fonctions, il n'y a pas de return. Donc ta fonction ne renvoie rien, elle peut prendre une valeur aléatoire. Je suppose que l'idée était, pour la première d'avoir return factoriel(n,i,fact);
Mais même avec cette correction, Tes factorielle et puissance ne vont pas marcher. Tu fais de beaux calculs, puis, rendu à l'étage n+1, tu forces le résultat à 1 !
Enfin, dans ton main, il faut réinitailiser p et fact à chaque boucle.

A mon avis, il vaut mieux écrire les fonctions factorielle et puissance pour travailler par valeurs décroissantes (de n à 1) plutôt que de croissantes de 1 à n+1. La fonction n'a plus besoin que d'un seul paramètre, c'est beaucoup plus simple (pas de i, de fact, ni de p)
0
sasanasy
 
bjr
je te conseil d'utiliser la fonction gamma d'euler pour calculer le factoriel car a partir d'un certain nombre la fonction que tu utilise pour calculer la factoriel dans ce code ne te donne plus le vrai valeur de la factoriel
utilise n!=gamma(n+1)
0

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

Posez votre question
Sylar44 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
oui et autant faire les boucles dans les fonctions en plus
ca simplifiera ton code et de loin si tu fais ce que le père te dit
0