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

Bash递归阶乘函数执行异常:num大于5时返回垃圾值

问题原因
  • Bash 函数的return返回值本质是进程退出状态码,仅支持0~255的无符号8位整数,超过范围的数值会自动对256取模,返回错误结果。
  • 5的阶乘为120,处于合法范围内所以运行正常,6的阶乘为720,超过255触发溢出,最终返回720 % 256 = 208,也就是你看到的垃圾值。
修复方法

Bash 函数要返回大于255的数值时,不要用return传递结果,改为直接将结果打印到标准输出,通过$()命令替换捕获输出即可,修正后的代码如下:

function fact {
    if (( $1 == 1 ))
    then
        echo 1
    else
        prev=$(( $1 - 1 ))
        prev_fact=$(fact $prev)
        echo $(( $1 * $prev_fact ))
    fi
}

echo -n "Enter the number: "
read num
val=$(fact $num)
echo "Factorial of $num is $val"
补充说明
  • 修正后的写法支持的阶乘上限为Bash内置整数的存储范围,通常为64位有符号整数,最大可正常计算到20的阶乘。
  • 你原代码中expr和$(())写法效果一致,不过$(())是Bash内置的算术扩展,不需要调用外部命令,性能更高,更推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:24:04