如何实现可重入的阶乘函数?现有实现是否符合要求咨询
你的阶乘函数完全满足可重入性要求!
嘿,先给你吃个定心丸——你写的这个fact函数是完全符合可重入函数标准的,咱们来一步步拆解验证:
首先把你的代码整理出来方便分析:
#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; }
可重入函数核心要求与你的函数匹配点
可重入函数的核心是多次调用(甚至嵌套/并发调用)时,不会因内部状态或外部依赖导致结果异常,咱们对照要求逐一确认:
- ✅ 未使用静态/全局变量:函数里的
c和fact都是局部自动变量,每次调用fact时,这些变量会在当前栈帧创建独立副本,不同调用之间完全互不干扰。 - ✅ 不依赖或修改共享资源:函数内部仅做局部变量的算术运算,既不读取也不修改任何外部全局状态、共享内存类资源。
- ✅ 操作上下文完全独立:循环里的乘法和自增都是基于局部变量的,哪怕在多线程环境下同时调用,或是在中断服务程序中嵌套调用,每个调用的栈上下文都是独立的,不会出现数据混乱。
额外小提醒
你main函数里两次调用fact(n)是冗余的(第一次调用的返回值没被使用),不过这完全不影响fact函数本身的可重入性,只是代码可以稍微优化下~
总的来说,这个阶乘函数是标准的可重入实现,放心用就好!
内容的提问来源于stack exchange,提问作者flora
相关产品推荐
相关产品推荐

