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

JavaScript递归函数基准情况始终返回undefined问题求助

问题排查与修复

核心问题:递归调用未返回结果

你的calcDays函数在递归调用自身时,没有将递归的返回值传递回去。当parcels.length !== 0时,函数执行完calcDays(parcels, days)后没有返回任何值,导致上层调用得不到有效结果,最终整个函数链的返回值为undefined。

修复步骤

  1. 在递归调用处添加return,将递归结果向上传递:
return calcDays(parcels, days)
  1. 额外优化:原代码直接修改了输入数组(使用splice),会导致外部的parcels数组被意外修改,建议创建数组副本处理,避免副作用。

修正后的完整代码

function calcDays(parcels, days) {
  let result = days;
  if (parcels.length === 0) return result;

  days++;
  // 创建数组副本,避免修改原数组
  let newParcels = [...parcels];
  // 用Math.min快速获取最小值
  let min = Math.min(...newParcels);
  // 计算剩余包裹数,过滤掉已完成的
  newParcels = newParcels.map(num => num - min).filter(num => num > 0);
  
  // 返回递归调用的结果
  return calcDays(newParcels, days);
}

function getMinimumDays(parcels) {
  let days = 0;
  return calcDays(parcels, days);
}

let parcels = [2, 2, 3, 4, 2];
console.log(getMinimumDays(parcels)); // 输出4

额外说明

  • 使用Math.min(...newParcels)替代forEach遍历找最小值,代码更简洁高效。
  • 用map+filter替代循环+splice,避免数组索引混乱的问题,同时保持函数纯性,不修改原输入数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:50:27