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

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

    #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 ответа

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

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

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

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

Ваша функция

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

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

Другие вопросы по тегам