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

如何将循环实现的addWithFactors方法改写为递归方法?

改写addWithFactors为递归方法

先拆解下你原来的循环方法核心逻辑:遍历数组的前n个元素,每个元素a[i]乘以它的位置系数i+1(第1个元素乘1,第2个乘2……第n个乘n),最后把所有乘积加总返回。

要改成递归写法,关键是抓准终止条件和递推关系,你已经找对了终止条件的方向,接下来一步步完善:

1. 明确终止条件

你写的if (n == 0)完全正确!当n=0时,没有任何元素需要计算,直接返回0就行,这就是递归的“出口”。

2. 推导递推逻辑

递归的本质是把大问题拆成更小的子问题:

  • 计算前n个元素的总和 = 前n-1个元素的总和 + 第n个元素的贡献值
  • 注意数组下标从0开始,第n个元素对应的是a[n-1],它的贡献值是n * a[n-1]

3. 写出递归代码

结合上面的逻辑,最终的递归版本代码如下:

public int addWithFactors(int[] a, int n) {
    // 终止条件:没有元素需要计算,返回0
    if (n == 0) {
        return 0;
    }
    // 递推:前n-1个元素的总和 + 当前第n个元素的贡献
    return addWithFactors(a, n - 1) + n * a[n - 1];
}

验证逻辑正确性

举个例子,假设数组a = [1,2,3],n=3:

  • 调用addWithFactors(a,3) → 调用addWithFactors(a,2) + 3*3
  • 调用addWithFactors(a,2) → 调用addWithFactors(a,1) + 2*2
  • 调用addWithFactors(a,1) → 调用addWithFactors(a,0) +1*1
  • addWithFactors(a,0)返回0
  • 回溯计算:0+1=1 → 1+4=5 →5+9=14,和原循环方法的计算结果(11 +22 +3*3=14)完全一致。

这样就完美替代原循环的逻辑啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:39:26