请教一个js递归循环的问题。求大神解答!

时间:2022-12-30 10:39:43
	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循环嵌套可以解决排列的问题。但是那种写代码太多了。必须用递归完成。大神帮忙啊。

2 个解决方案

#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;
}


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

#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;
}


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