Как я могу сделать так, чтобы моя функция факториала возвращалась?
Я должен написать реентерабельную факториальную функцию, когда я искал, что такое реентерабельная функция, я обнаружил много определений, например, реентерабельная функция не должна использовать статическую или глобальную переменную, и функция не может быть изменена во время использования. используя статические или глобальные переменные, но я не знаю, достаточно ли для моей функции повторного входа или нет,
#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;
}
был вызван только один раз в основном.