2016-08-04 4 views
-1

J'essaie de calculer factorielle en utilisant la récursivité mais mon programme retourne une valeur erronée. Je suis incapable de comprendre la fonctionnalité de récursivité. Aidez-moi à comprendre comment la récursivité fonctionne. Mon code est le suivant:Programme factoriel utilisant la récurrence retournant une valeur erronée

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

int main() 
{ 
    //code 
    int T,N,sol; 
    scanf("%d\n",&T); 

    while(T--) { 
     scanf("%d\n",&N); 

     sol=fact(N); 
     printf("%d\n",sol); 
    } 

    return 0; 
} 

int fact(int n) 
{ 
    int value; 
    while(n>0) { 
     value=n*fact(n-1); 
     n=n-1; 
    } 

    return value; 
} 
+1

Comme vous avez mal configuré la fonction – Li357

+1

, initialisez 'value' avant de l'utiliser. De plus, la fonction est erronée aussi. – Haris

+0

@AndrewL. pouvez-vous s'il vous plaît laissez-moi savoir où est l'erreur dans la fonction –

Répondre

3

Remplacez votre fonction de fait avec celui-ci:

int fact(int n) 
{ 
    int value = 1; 
    if(n>0) 
    { 
     value=n*fact(n-1); 
    } 
    return value; 
} 
+2

Ceci est une réponse correcte, mais s'il vous plaît expliquer le raisonnement, ne pas simplement poster du code – Li357

0

Vous utilisez récursion ainsi qu'une boucle while dans la fonction fact

A récursion devrait remplacer la boucle. Vous avez également besoin d'une condition de sortie pour la fonction. Pour le factoriel, il peut être à 0 et la factorielle de 0 est 1.

La fonction peut être réécrite comme ci-dessous

int fact(int n) 
{ 
    int value; 
    if (n <0) 
    { 
    return -1; 
    } 
    else if (n == 0) 
    { 
    return 1; 
    } 
    else 
    { 
    value=n*fact(n-1); 
    } 
    return value; 
} 

modifié pour ajouter la condition pour les nombres négatifs. Si la fonction renvoie -1, le programme principal doit donner à l'utilisateur un message d'erreur.

+0

Si vous passez une valeur négative, la récursivité ne se terminera jamais. – Li357

+0

Factoriel pour un nombre négatif n'est pas défini. Si nous attendons un nombre négatif, alors une autre sorte d'erreur doit être donnée, de préférence au niveau de l'entrée. La fonction peut également renvoyer -1 pour indiquer une erreur. –

+0

Alors, mettez en place un cas pour cela – Li357