JS递归函数 - 堆算法函数逻辑

时间:2015-10-06 14:37:11

标签: 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 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');

此函数返回传递的数组的排列。它正在工作,但我真的不知道它是如何工作的。如果只有一次推送调用,结果数组的排列结果究竟如何呢?另外,烫发功能被称为4次或更少?我只是想了解这件事的逻辑。交换功能是不言自明的。我只是在perm函数的else语句中遇到问题。

提前致谢..

0 个答案:

没有答案