Calculate the exponential by recursion

October 2017


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
Published by aakai1056. Latest update on December 7, 2010 at 05:16 AM by aakai1056.
This document, titled "Calculate the exponential by recursion," is available under the Creative Commons license. Any copy, reuse, or modification of the content should be sufficiently credited to CCM (ccm.net).