我试图使用JavaScript递归来反转数组,但它不起作用,需要帮助我在这里错过了什么

sigwle7e  于 2023-08-02  发布在  Java
关注(0)|答案(3)|浏览(78)

我试图使用JavaScript递归来反转数组,但它不起作用。需要帮助我在这里错过了什么。

function reverseArrayHelper(left, right, arr) {
  if (left >= right) return; // base condition: if l an r collide then only return

  // do the small task: swapping left with right
  let temp = arr[left];
  arr[left] = arr[right];
  arr[right] = temp;
  // arr[left], arr[right] = arr[right], arr[left]

  return reverseArrayHelper(left + 1, right - 1, arr); // ask recursion to do the remaining task
}

function reverseArray(arr, m) {
  return reverseArrayHelper(m + 1, arr.length - 1, arr);
}

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

字符串

xuo3flqw

xuo3flqw1#

如果你担心响应是undefined,你必须在这里返回数组if (left >= right) return arr;。因为你没有在这一行返回值,所以响应是未定义的。
但反过来的逻辑取决于你。

function reverseArrayHelper(left, right, arr) {
    if (left >= right) return arr; // base condition: if l an r collide then only return

    // do the small task: swapping left with right
    let temp = arr[left];
    arr[left] = arr[right];
    arr[right] = temp;
    // arr[left], arr[right] = arr[right], arr[left]

    return reverseArrayHelper(left + 1, right - 1, arr); // ask recursion to do the remaining task
}

function reverseArray(arr, m) {
    return reverseArrayHelper(m + 1, arr.length - 1, arr);
}

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

字符串

oprakyz7

oprakyz72#

你不需要找到中点。我已经修复了下面的代码。你应该在基本条件下返回数组。

function reverseArray(arr, left = 0, right = arr.length - 1) {
  if (left >= right) {
    return arr;
  }

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

  return reverseArray(arr, left + 1, right - 1);
}

字符串

ggazkfy8

ggazkfy83#

代码的问题是你没有从reverseArray函数返回修改后的数组

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

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

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

function reverseArray(arr, m) {
  return reverseArrayHelper(m + 1, arr.length - 1, arr);
}
// This code reverses all elements after the 4th element (after index 3)
console.log(reverseArray([1, 2, 3, 4, 5, 6], 3));

字符串
reverseArrayHelper函数中,我添加了arr作为基本情况返回值。这确保了修改后的数组在递归调用中一直被返回。
使用此代码,要反转整个数组,您应该:

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

相关问题