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

getFirstHalf递归函数返回结果不符合预期问题求助

递归函数未返回最终结果的问题排查

问题分析

你的代码核心问题在于递归调用时未传递返回值:当你在if分支里调用getFirstHalf(firstHalf)时,只是执行了这个递归函数,但没有把递归得到的最终结果(长度为1的数组)赋值给当前层的变量,也没有直接返回这个递归结果。因此当前函数执行到最后,依然返回的是自己计算的那一层的前半部分,而非递归到最底层的结果。

比如传入[1,2,3,4,5,6,7,8]时:

  1. 第一次调用生成[1,2,3,4],因为长度不是1,调用递归
  2. 第二次调用生成[1,2],长度不是1,继续调用递归
  3. 第三次调用生成[1],长度为1,返回[1]
  4. 但第二次调用并没有接收这个返回值,依然返回自己生成的[1,2]
  5. 第一次调用同样没有接收返回值,最终返回[1,2,3,4]

修正代码

只需在递归调用时,将返回值传递回上层即可,有两种写法:

写法一:直接返回递归结果

const getFirstHalf = function (array) {
  const firstHalf = [];
  for (let i = 0; i < Math.trunc(array.length / 2); i++) {
    firstHalf.push(array[i]);
  }
  if (firstHalf.length !== 1) {
    // 直接返回递归调用的结果,替换当前层的返回值
    return getFirstHalf(firstHalf);
  }
  return firstHalf;
};

写法二:更新变量后返回

const getFirstHalf = function (array) {
  let firstHalf = [];
  for (let i = 0; i < Math.trunc(array.length / 2); i++) {
    firstHalf.push(array[i]);
  }
  if (firstHalf.length !== 1) {
    // 将当前变量替换为递归后的结果
    firstHalf = getFirstHalf(firstHalf);
  }
  return firstHalf;
};

代码优化(可选)

可以用数组的slice方法简化前半部分的生成,替代循环,让代码更简洁:

const getFirstHalf = function (array) {
  const halfLength = Math.trunc(array.length / 2);
  const firstHalf = array.slice(0, halfLength);
  return firstHalf.length === 1 ? firstHalf : getFirstHalf(firstHalf);
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:36:46