Calculate the exponential by recursion

December 2016


Calculate the exponential by recursion




Issue


Please, I would like to know the error (s) that exists in this algorithm. For information: this algorithm is to compute the exponential method by recursion.

#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);
}

Solution


Several errors.

I pass over the absurdity of using recursion to calculate the factorial and power, I suppose you requested.

First, detailed syntax ultra-classic: the test is ==, not =. In your two functions should be if (i == n +1)

Worse, in the else test both functions, there is no return. So your function returns nothing, it may take a random value. I guess the idea was to have the first return factorial (n, i, fact);
But even with this correction factor and Thy power will not work. You make fine calculations, then returned to the stage n +1, you can force the result to 1!
Finally, in your hand, you have reinitialize p and fact on each loop.

In my opinion it is better to write the factorial function and power to work by decreasing values (from n to 1) rather than increasing from 1 to n +1. Function only requires one parameter, it is much simpler (no i, Fact, or p)

Note


Solve by le père

Related :

This document entitled « Calculate the exponential by recursion » from CCM (ccm.net) is made available under the Creative Commons license. You can copy, modify copies of this page, under the conditions stipulated by the license, as this note appears clearly.