0
votes

programme pour trouver factorial du numéro en utilisant uniquement la fonction principale

Lorsque j'exécute ce programme, il donnera une réponse également, mais lors de la sélection de l'option n, elle demandera à nouveau à entrer les options. Vérifiez-le et fournira une bonne solution comment elle peut être effectuée

#include<stdio.h>
int main()
{
    char ch;
    static int count = 0;
    static int num;
    static unsigned long long int res;
    static int temp;

    if (count == 0)
    {
        printf("Enter the value of Number:");
        scanf("%d", &num);
        if (num < 0)
        {
            printf("Invalid input.");
            return 0;
        }
        temp = num;
        res = 1;
        count++;

        do {
            main();
            printf("Factorial of %d is\t:%llu\n", temp, res);
            printf("Do you want to continue y/n :");
            scanf("\n%c", &ch);

        } while (ch == 'y' || ch == 'Y');
    }

    //Logic for recursive factorial function
    if (num > 0)
    {
        res = res * num;
        num = num - 1;
        main();
    }
    else
    {
        count = 0;
    }
    return 1;
}


4 commentaires

"Utiliser seulement la fonction principale" et "bonne solution" sont mutuellement exclusives.


si (num> 0) doit être remplacé par pendant (num> 1) et assommer la récursion. Et la récursion dans la boucle d'entrée. L'ensemble du programme doit être restructuré.


Évitez d'appeler principal () récursivement. Tout ce que vous cherchez à faire - y compris le calcul du factoriel d'une valeur entrée - peut être effectué à l'aide de constructions de boucle.


Ok mais je veux une solution dans laquelle la récursion est utilisée et seulement dans la fonction principale comment faire ça


3 Réponses :


0
votes

Il demande à nouveau parce que vous appelez récursivement la fonction principale de votre part. Je ne sais pas ce que vous vouliez faire avec cet appel récursif mais à peu près sûr que vous devriez supprimer cette ligne.

=> retirer "principal ();"


2 commentaires

Voulez-vous un programme factorial à l'aide de la récursion mais uniquement avec la fonction principale appelante et souhaitez-vous continuer les options comment le faire


@Piyushkumar Oui mais votre appel récursif de MAIN est OK dans votre si. Le problème est celui dans le faire pendant. Vous devriez le supprimer



1
votes

L'appel récursif de principal est un "non go" absolu. Ne fais jamais ça. Au lieu de cela, mettez simplement le calcul de la factorielle juste après avoir reçu l'entrée.

Je ne l'appellerai pas une bonne solution, mais le code ci-dessous est proche de votre propre code et évite l'appel récursif de principal . xxx


1 commentaires

Je dois faire avec l'utilisation de la récursivité et seulement appeler la fonction principale



1
votes

L'appel récursif de "Main ()" représente-t-il la réinitialisation du programme? Si tel est le cas, pourquoi n'utilisez-vous pas une boucle infinie pour vérifier l'entrée, puis dans le corps que vous effectuez un calcul factoriel, des sorties, telles que des impressions, etc., et la fin du programme lorsque cela n'est plus nécessaire avec une certaine entrée. Je crois que cela devrait faire l'affaire: xxx


0 commentaires