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

求助:使用JavaScript递归反转数组失败,求排查代码问题

递归反转数组代码的问题分析与修复

核心问题

你的代码逻辑本身可以完成从索引m+1到末尾的数组反转,但有两个关键问题导致你觉得功能失效:

  1. 返回值错误
    reverseArray函数返回的是reverseArrayHelper的调用结果,但reverseArrayHelper在基准条件(left >= right)触发时返回undefined,递归过程中也只是传递下一层调用的结果,最终整个reverseArray会返回undefined,而不是你期望的反转后的数组。

  2. 对原地修改的认知偏差
    reverseArrayHelper是原地修改输入数组的,实际上调用函数后原数组已经被正确反转了,但你console.log的是reverseArray的返回值(undefined),所以误以为功能没生效。

修复后的代码

只需要修改reverseArray函数,让它返回已经被修改的数组即可:

function reverseArrayHelper(left, right, arr) {
  if (left >= right) return;

  // 交换左右指针元素
  let temp = arr[left];
  arr[left] = arr[right];
  arr[right] = temp;

  reverseArrayHelper(left + 1, right - 1, arr);
}

function reverseArray(arr, m) {
  reverseArrayHelper(m + 1, arr.length - 1, arr);
  return arr; // 返回修改后的数组
}

console.log(reverseArray([1, 2, 3, 4, 5, 6], 3)); // 输出 [1, 2, 3, 6, 5, 4]

可选优化:避免原地修改原数组

如果不想改变输入的原数组,可以在reverseArray里先复制一份数组再处理:

function reverseArrayHelper(left, right, arr) {
  if (left >= right) return;

  let temp = arr[left];
  arr[left] = arr[right];
  arr[right] = temp;

  reverseArrayHelper(left + 1, right - 1, arr);
}

function reverseArray(arr, m) {
  const newArr = [...arr]; // 浅复制原数组
  reverseArrayHelper(m + 1, newArr.length - 1, newArr);
  return newArr;
}

const originalArr = [1, 2, 3, 4, 5, 6];
console.log(reverseArray(originalArr, 3)); // 输出 [1, 2, 3, 6, 5, 4]
console.log(originalArr); // 原数组保持不变 [1, 2, 3, 4, 5, 6]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:47:38