arr = new Array('12','12','12','12','1','1','1','1','1','1'); range(arr);
function range(arr,k=0,str=''){
var i=0;
var v=k+1;
var length = arr[k].length;
while(i<length){
if(k!=9){
range(arr,v,str+arr[k][i]);
}else{
alert(str+arr[k][i]);
}
i++;
}
return false;
}这段代码主要是递归循环出排列组合。正确的结果应该是:
1111111111
1112111111
1121111111
1122111111
1211111111
1212111111
1221111111
1222111111
2111111111
2112111111
2121111111
2122111111
2211111111
2212111111
2221111111
2222111111共16组数字。但是他总是输出不正确。我发现。在alert提示以后我稍微等一会再按就正常了。连续的按是不正确的。他总是输出2个就结束了。每次结果还不一样。我知道使用for循环嵌套可以解决排列的问题。但是那种写代码太多了。必须用递归完成。大神帮忙啊。

解决方案 »

  1.   

    看完不说其他问题,我表示,我真是没有见过这样定义函数的
    function range(arr,k=0,str='')
    这样可以?那我理解的意思是,不会在每次调用这个函数的时候,第二个参数都被赋初值了吧
    那这样的话,还需要后面的两个参数吗?
    再加一句,我这边这样运行的时候,浏览器都提示有语法错误,这个不知道楼主用哪个浏览器运行的呢?
      

  2.   

        arr = new Array('12','12','12','12','1','1','1','1','1','1');
     
    range(arr,0,"");
    function range(arr,k,str){
        var i=0;
        var v=k+1;
        var length = arr[k].length;
        while(i<length){
    var arr2 = arr[k].split("");
            if(k!=9){
                range(arr,v,str+arr2[i]);
            }else{
                alert(str+arr2[i]);
            }
            i++;
        }
        return false;
    }按我自己的理解改动了一点,楼主参考!