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

C++递归函数计算存款本息:测试结果不符求助

问题排查与修正

核心错误分析

  1. 递归返回值错误累加:原代码中return sum + deposit(sum, p, n - 1)完全违背存款计算逻辑,它会把当前期更新后的本金和后续所有期的计算结果重复相加,直接导致数值爆炸。比如你的测试用例里,第一次递归返回110+242=352,就是这个错误造成的。
  2. 计算逻辑与预期不匹配:当你移除sum+后,代码实现的是复利计算(每期利息加入本金,下一期按新本金计息),所以得到121(100*(1+10%)²),但你预期的是120,说明你需要的是单利计算(每期利息基于初始本金)。

修正方案

方案1:单利计算的递归实现

单利的核心是每期利息仅基于初始本金,总金额=初始本金+初始本金×利率×期数。递归实现如下:

int deposit(int sum, int p, int n) {
    if (n == 0) {
        return sum;
    }
    // 每次递归累加一期的单利,本金保持初始值不变
    return deposit(sum, p, n - 1) + sum * p / 100;
}

测试用例deposit(100,10,2)的执行流程:

  • n=2:返回deposit(100,10,1) + 10
  • n=1:返回deposit(100,10,0) + 10
  • n=0:返回100
    最终结果:100+10+10=120,完全符合你的预期。

方案2:复利计算的递归实现(若预期值有误)

如果你实际需要的是复利计算,只需修正递归返回逻辑即可:

int deposit(int sum, int p, int n) {
    if (n == 0) {
        return sum;
    }
    // 复利:每期利息加入本金,下一期按新本金计息
    return deposit(sum + sum * p / 100, p, n - 1);
}

此时测试用例返回121,是复利计算的正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:05:26