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

递归函数引发Segmentation Fault问题求助:C与Python差异及解决方法

问题原因与解决办法

原因分析

你的C语言递归函数没有终止条件,会无限调用自身:

  • 调用factorial(4)时,会依次触发factorial(3)、factorial(2)、factorial(1)、factorial(0)、factorial(-1)……这个调用链永远不会停止。
  • 每次递归调用都会在程序栈上分配新的函数栈帧,而栈的内存空间是有限的,当栈被彻底耗尽时,就会触发Segmentation Fault(段错误)。

至于Python版本看似能运行的原因:Python内置了递归深度限制(默认约1000层),超过限制后会抛出RecursionError异常,而非直接触发段错误,但本质上你的Python代码逻辑同样存在错误,只是报错形式不同。

解决办法

给递归函数添加终止条件:数学上0!和1!的结果都是1,因此当x <= 1时直接返回1,修改后的代码如下:

#include <stdio.h>

int factorial( int x );
int main(){
    printf("%d\n", factorial(4)); // 可添加打印查看计算结果
    return 0;
}

int factorial( int x ){
    if (x <= 1) {
        return 1;
    }
    return x * factorial(x-1);
}

修改后递归到x=1时就会停止调用链,开始逐层返回计算结果,最终得到正确的阶乘值。

内容的提问来源于stack exchange,提问作者Paroz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:01:01