You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现可重入的阶乘函数?现有实现是否符合要求咨询

你的阶乘函数完全满足可重入性要求!

嘿,先给你吃个定心丸——你写的这个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:24:27