JavaScript递归函数基准情况始终返回undefined问题求助
问题排查与修复
核心问题:递归调用未返回结果
你的calcDays函数在递归调用自身时,没有将递归的返回值传递回去。当parcels.length !== 0时,函数执行完calcDays(parcels, days)后没有返回任何值,导致上层调用得不到有效结果,最终整个函数链的返回值为undefined。
修复步骤
- 在递归调用处添加
return,将递归结果向上传递:
return calcDays(parcels, days)
- 额外优化:原代码直接修改了输入数组(使用
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
相关产品推荐
相关产品推荐

