Javascript JS递归函数-堆算法函数逻辑
我试图理解这个函数背后的逻辑:Javascript JS递归函数-堆算法函数逻辑,javascript,recursion,permutation,Javascript,Recursion,Permutation,我试图理解这个函数背后的逻辑: function permAlone(str) { arr = str.split(""); result = []; perm(arr, arr.length); return result; function perm(string, length){ if (length == 1){ result.push(string.join("")); } else { for (var
function permAlone(str) {
arr = str.split("");
result = [];
perm(arr, arr.length);
return result;
function perm(string, length){
if (length == 1){
result.push(string.join(""));
}
else {
for (var i=0; i < length; i++){
perm(string, length-1);
if(length % 2 == 0){
swap(string, i, length-1);
}
else{
swap(string, 0, length-1);
}
}
}
}
function swap(array, first, second){
var temp = array[first];
array[first] = array[second];
array[second] = temp;
}
}
permAlone('aab');
函数permolone(str){
arr=str.split(“”);
结果=[];
perm(arr,arr.length);
返回结果;
函数perm(字符串、长度){
如果(长度==1){
result.push(string.join(“”));
}
否则{
对于(变量i=0;i
此函数返回所传递数组的排列。它在工作,但我真的不明白它是怎么工作的。如果结果数组只有一个push调用,那么它到底有多个置换?另外,perm函数被调用的次数是4次还是更少?我只是想了解这件事的逻辑。交换函数是不言自明的。我只是在perm函数的else语句中遇到了问题
提前感谢。当然有不止一个
push()
,而且根据输入的长度,几乎肯定有超过4个调用perm()
。我建议您添加console.log(string)
作为perm()
函数的第一行,然后查看输出——这应该有助于您理解。@dave,谢谢……我已经添加了console.log。。我想我现在可以理解了。因此,首先函数perm迭代直到length==1,然后它推送并中断函数。然后for循环继续,检查长度是偶数还是奇数add调用swap函数。然后for迭代并再次启动perm函数,直到for中的i到达i==长度。