JS宏进阶:递归练习

一、题目

给定任意一个一维数组,编写一个程序返回一个二维数组,该二维数组中所有的一维数组是给定一维数组打乱顺序后重新构成的(包含给定数组本身)。例如:[1,2,3] ==> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,2,1],[3,1,2]]。要求:使用递归完成。

二、分析

基本情况:如果数组为空或只有一个元素,则其排列只有一种可能,就是它本身。

递归步骤:

  • 对于数组中的每个元素,我们可以将其视为排列的起始元素。
  • 剩余的元素可以递归地排列。
  • 将当前元素与剩余元素的每个排列组合,形成一个完整的排列。

交换顺序:

  • 可以通过在原数组上交换元素的位置来生成排列。
  • 递归地固定每个位置的元素,然后对剩下的子数组进行排列。

三、代码实现

定义一个函数 getPermutations(arr) 用于计算输入数组 arr 的所有排列(即所有可能的顺序组合)。例如:

function getPermutations(arr) {
    let result = [];
    function callback(current, remaining) {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackispy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值