如何将循环实现的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
相关产品推荐
相关产品推荐

