当前位置: 首页 > 知识库问答 >
问题:

如何使用递归将元素插入数组中的所有位置?

况明贤
2023-03-14

我需要使用递归完成以下任务:

声明一个函数insert\u all\u positions(插入所有位置),该函数接受以下参数:一个元素x和一个数组arr。函数必须返回一个数组数组,每个数组对应于arr,其中x插入到可能的位置。也就是说,如果arr是长度N,则结果是具有N 1个数组的数组。

例如,插入所有位置(10、[1,2,3])的结果是数组:

[[10,1,2,3],
[1,10,2,3],
[1,2,10,3],
[1,2,3,10]]

到目前为止,我有这个代码:

function insert_all_positions (x, arr) {
    if (arr.length === 1) {
        return arr.concat(x)
    }
    else {

    }
}

共有3个答案

周睿范
2023-03-14

您不必使用递归来实现这一点。但此函数应返回您要查找的内容:

function insert_all_positions (x, arr) {
    const arrays = [];
    for (let i = 0; i <= arr.length; i++) {
        const value = [...arr.slice(0, i), x, ...arr.slice(i)];
        arrays.push(value);
    }
    return arrays
}
蓝宜
2023-03-14

您可以通过克隆来使用递归,并在索引(i)处添加x元素,然后调用具有相同参数并递增i的函数:

function insert_all_positions (x, arr, i = 0) {
  const clone = [...arr] // clone the array
  
  clone.splice(i, 0, x) // add the item at place i
  
  return i < clone.length - 1 ? // if still under the full length
    [clone, ...insert_all_positions(x, arr, i + 1)] // return current and next item/s
    :
    [clone] // return only current
}

const result = insert_all_positions (10, [1,2,3])

console.log(result)
苏鸿羽
2023-03-14

这是一个纯递归。

function f(x, A){
  return A.length ? [[x, ...A]].concat(
    f(x, A.slice(1)).map(e => [A[0]].concat(e))) : [[x]]
}

var x = 10
var A = [1, 2, 3]

console.log(JSON.stringify(f(x, A)))
 类似资料:
  • 问题内容: 假设我们有两个数组: 现在,我想在每个数组的第三个元素之后插入。我该怎么做? 问题答案: 可以用来提取数组的部分,联合数组运算符()可以重新组合部分。 这个例子: 给出:

  • 这是我的面向对象java编程类的作业: 编写一个名为printArray()的递归函数,该函数显示整数数组中的所有元素,并用空格分隔。数组的大小必须为100个元素,并使用for循环和随机数生成器填充。其伪代码如下: 这就是我遇到麻烦的地方 我可以像我应该的那样打印所有在它们之间有空格的整数,但是我不知道如何调用printArray来打印它,这就是我应该显示数组的方式。 这是我目前的代码: 我的问题

  • 但是querySelectorAll(“:not([foo])”)仍然会返回未选定元素的子元素。

  • 我必须使用递归在java中创建一个方法(int[]v, int a, int b),该方法接受一个整数数组并返回一个数组,其中数组的每两个元素之间必须有值a或值b,交替。 例如,如果数组v={1,5,6,8},当我调用这样的方法(v,0,1)时,该方法应返回{1,0,5,1,6,0,8}。 任何类型的伪代码都会有帮助,我真的很难实现这个。谢谢!

  • 为了更清楚地说明,我试图找到这个问题的递归函数: null 我已经用迭代和循环解决了这个问题,但是由于我刚刚介绍了递归方法,所以我仍然在特别地努力解决这个问题。这是我对它的迭代解决方案。

  • 问题内容: 必须确定新对象在排序数组中的插入位置。 在纯Swift中,最好的高性能方法是什么? 类似于以下内容: 我想找出正确的位置并插入元素,而不是追加新元素然后对数组进行排序: 问题答案: 这是在Swift中使用二进制搜索的一种可能的实现方式(来自 http://rosettacode.org/wiki/Binary_search#Swift并进行了一些修改): 如同假定数组是相对于比较器排序