题目:有一个数组,每个元素都不重复,设计一个算法,对它进行全排列,并且要打印所有的情况
js递归解法:
/*
arr 需要进行全排列的数组
p 数组起始位置
q 数组结束位置
*/
function prem(arr,p,q){
if(p===q){ // 递归结束条件
console.log(arr)
}else{
for(let i=p;i<=q;i++){
swap(arr,p,i) // 表示每一个元素都有机会排在前面
prem(arr,p+1,q) // 表示对剩下的元素都进行一次全排列
swap(arr,p,i) // 一次全排列完成后,需要再次调换过来
}
}
}
function swap(arr,i,j){
let tmp = arr[i]
arr[i] = arr[j]
arr[j] = tmp
}
prem([1,2,3,4,5],0,4)