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

递归立方和计算函数未累加首次调用结果问题求助

问题分析与修复方案

问题根源

你的代码输出错误的核心原因有两个:

  1. pow函数的浮点数精度误差:pow(i,3)返回double类型,部分整数立方的计算结果会因为浮点数精度问题出现微小偏差(比如pow(5,3)可能得到124.99999999999999而非精确的125)。当将这个值赋值给int类型的sum时,会直接截断小数部分,导致少累加1,最终N=5时结果少1。
  2. 变量类型不匹配:sum定义为int,但函数返回long long,不仅会放大精度问题,还会在N较大时出现整数溢出。

修复方案

推荐使用整数乘法计算立方,彻底避免浮点数精度问题,同时统一变量类型为long long:

using namespace std;

long long calSum(long long i, long long n)
{
    if (i > n)
        return 0;
    // 用整数乘法计算立方,完全避免浮点数精度问题
    long long cube = i * i * i;
    return cube + calSum(i + 1, n);
}

int main()
{
    int n;
    cin >> n;
    cout << calSum(1, n) << endl;
    return 0;
}

如果坚持使用pow函数,需要通过加0.5的方式修正精度误差,并修正变量类型:

using namespace std;

long long calSum(long long i, long long n)
{
    if (i > n)
        return 0;
    // 加0.5后再转换,修正浮点数精度带来的截断误差
    long long cube = static_cast<long long>(pow(i, 3) + 0.5);
    return cube + calSum(i + 1, n);
}

int main()
{
    int n;
    cin >> n;
    cout << calSum(1, n) << endl;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:50:12