C 如何使阶乘函数可重入?
我应该写一个可重入阶乘函数,当我搜索什么是可重入函数时,我发现了很多定义,比如可重入函数不应该使用静态或全局变量,函数在使用时不能更改,我避免使用静态或全局变量,但我不知道我的函数是否可以重入C 如何使阶乘函数可重入?,c,factorial,reentrancy,C,Factorial,Reentrancy,我应该写一个可重入阶乘函数,当我搜索什么是可重入函数时,我发现了很多定义,比如可重入函数不应该使用静态或全局变量,函数在使用时不能更改,我避免使用静态或全局变量,但我不知道我的函数是否可以重入 #include <stdio.h> int fact(int n){ int c,fact = 1; for (c = 1; c <= n; c++) fact = fact * c; return f
#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;
}
#包括
整数事实(整数n){
int c,事实=1;
对于(c=1;c您的函数,fact(n)
,既没有使用全局数据也没有使用静态数据,没有修改自己的代码,也没有在中调用另一个不可重入的函数
你的职能
int fact(int n){
int c,fact = 1;
for (c = 1; c <= n; c++)
fact = fact * c;
return fact;
}
int事实(int n){
int c,事实=1;
对于(c=1;c,您的函数不仅是可重入的,而且是纯的(用某些编译器的术语来说,)
原因是:
- 它只有返回值的副作用
- 其返回值完全取决于参数的值
您可以谈论递归函数。int-fact(int-n){if(n==1)返回1;return n*fact(n-1);}
和一个终端
版本将是int-fact(int-n,int-val){if(n==1)返回val;返回事实(n-1,val*n);}
递归函数在默认情况下是可重入的吗?这就是您的意思吗?对于您的示例,我不确定您是否在谈论这个问题。reentrant=可以从多个线程调用的函数,vs,recursive=在其实现中调用自身的函数。您确定您的练习是关于“reentrant”的吗“没有在”@Jean-BaptisteYunès中调用另一个不可重入函数。我冒昧地进行了修改,因为不仅仅是我注意到了这一点。