日期:2014-05-16  浏览次数:20337 次

请教一个js递归循环的问题。求大神解答!
	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循环嵌套可以解决排列的问题。但是那种写代码太多了。必须用递归完成。大神帮忙啊。
------解决方案--------------------
    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;
}


按我自己的理解改动了一点,楼主参考!