Как я могу сделать так, чтобы моя функция факториала возвращалась? - PullRequest
0 голосов
/ 13 мая 2018

Я должен написать реентерабельную факториальную функцию. Когда я искал, что такое реентерабельная функция, я обнаружил много определений, например, реентерабельная функция не должна использовать статическую или глобальную переменную, и функция не может быть изменена во время использования. , Я избегал использования статических или глобальных переменных, но я не знаю, достаточно ли для моей функции повторного входа или нет,

    #include <stdio.h>

    int fact(int n){
       int c,fact = 1;
       for (c = 1; c <= n; c++)
           fact = fact * c;
        return fact;
    }
    int main()
    {   
        int n;  
        printf("Enter a number to calculate its factorial\n");
        scanf("%d", &n);
        fact(n);
        printf("Factorial of %d = %d\n", n, fact(n));

      return 0;
    }

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Как написано, ваша функция не просто реентерабельна, она также чиста (в терминологии некоторых компиляторов __attribute__((const))).

Причина в том, что:

  • У него есть только побочный эффект возврата значения.
  • Его возвращаемое значение зависит исключительно от значения параметров.
0 голосов

Ваша функция, fact(n), не использовала глобальные или статические данные, не изменила свой собственный код и не вызывала другую нерегенерируемую функцию внутри.

Ваша функция

int fact(int n){
   int c,fact = 1;
   for (c = 1; c <= n; c++)
       fact = fact * c;
    return fact;
}

вызывался только один раз в основном.

...