错误的排列输出

问题描述:

我这个代码有问题。我想打印所有的排列,但我得到了错误的输出。错误的排列输出

function Swap (array,index1,index2) 
{ 
    var temp = array[index1]; 
    array[index1] = array[index2]; 
    array[index2] = temp; 
} 
function Permutation(ArrayNum , StartIndex) 
{  
    if(StartIndex == ArrayNum.length-1) 
    { 
     console.log(ArrayNum);   
    } 
    else 
    { 
     for(i = StartIndex; i< ArrayNum.length; i++) 
     { 
      Swap(ArrayNum,StartIndex,i); 
      Permutation(ArrayNum,StartIndex + 1); 
      Swap(ArrayNum,StartIndex,i); 
     }    
    }    
} 

例如,对于三个数字,我得到这个输出,这不是完整的排列列表。

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

我该如何解决这个问题?

+0

从哪里得到算法?在纸上试试。 – paiv

+0

这个算法在网络上无处不在,它是回溯算法,我认为它是正确的,但输出不是 –

+0

如果算法是正确的,那么问题必须在于如何调用函数或如何打印结果,但你也不会显示。 –

您的i变量是全局的,它应该是本地的。您可以看到错误,如果你设定了严格的模式"use strict";

 for(i = StartIndex; i< ArrayNum.length; i++) 
      ^

ReferenceError: i is not defined 

没有错误,它会去只通过一个循环。

+0

谢谢你的回复,但我声明变量我在一个循环内,我认为它是一个本地.....无论如何有任何修改我的代码,修复这个问题 –

+1

非常感谢你通过添加var之前我代码工作正常,但我不明白为什么发生这个问题,因为我没有任何变量我在我的所有代码。 再次非常感谢你 即时通讯菜鸟开发人员,我感谢你的帮助。 –