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

嵌套数组元素按深度相乘求和的递归实现问题及层级控制疑问

代码存在的问题

你的代码里level是全局变量,进入嵌套数组后增加了level,但处理完子数组后没有把level回退到之前的值,导致后续元素的深度计算错误。比如:

  • 处理最外层数组时level=1,遇到子数组[2,6,[3,2],4],level变成2;
  • 再遇到子数组[3,2],level变成3,处理完这两个元素后,level没有减回2;
  • 此时处理后面的元素4时,会用level=3计算,得到43=12,但正确应该是24=8;
  • 最终总和会比正确值大,得不到53。

正确控制level的两种方式

方式1:将level作为递归参数传递(推荐,无全局变量副作用)

把level作为函数参数,每次进入子数组时传递level+1,不需要修改全局变量,逻辑更清晰:

function calculateSum(arr, level = 1) {
  let sum = 0;
  arr.forEach(item => {
    if (Array.isArray(item)) {
      sum += calculateSum(item, level + 1);
    } else {
      sum += item * level;
    }
  });
  return sum;
}

const arr = [1,2,4,[2,6,[3,2],4],7];
console.log(calculateSum(arr)); // 输出53

方式2:使用全局变量但增加回溯逻辑

如果要保留全局变量的写法,需要在处理完子数组后把level减回去(回溯),确保每个层级的level正确:

let level = 1;
let sum = 0;
function recursive(arr){
  arr.forEach(i=> {
    multiplier(i)
  })
}
function multiplier(i){
  if(Array.isArray(i)){
    level++;
    recursive(i);
    level--; // 处理完子数组后回退level
  } else {
    sum += i*level;
  }
}

const arr = [1,2,4,[2,6,[3,2],4],7];
recursive(arr);
console.log(sum); // 输出53

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:32:08