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

为什么自定义递归幂函数传入非0/1的b值时返回-nan(ind)错误

错误原因

  • 核心问题是非void返回值的函数,在b>1的执行分支没有显式返回值,属于C语言的未定义行为。

你的代码中,当入参b不为0或1时,执行完a *= c;后仅调用了递归函数power_func(a, b - 1, c),但没有将递归调用的结果作为当前函数的返回值返回。C语言规范要求,声明了非void返回类型的函数,所有执行分支都必须显式返回对应类型的值,否则读取函数返回值时会得到不可预测的结果,你遇到的-nan(ind)就是这类未定义行为的典型表现。

修复方案

只需要在递归调用前加return关键字,把递归结果向上传递即可:

double power_func(double a, int b, double c) {
    if (b == 0)
        return 1.0;
    else if (b == 1)
        return a;
    else 
        a *= c;
        
    return power_func(a, b - 1, c);
}

额外优化提示

你的当前实现需要额外传入初始底数作为第三个参数c,逻辑上可以简化为只传底数和幂次两个参数:

double power_func(double base, int exp) {
    if (exp == 0) return 1.0;
    return base * power_func(base, exp - 1);
}

如果要处理负幂次可以再加对应分支判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:48:03