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='')
这样可以?那我理解的意思是,不会在每次调用这个函数的时候,第二个参数都被赋初值了吧。。。
那这样的话,还需要后面的两个参数吗?
再加一句,我这边这样运行的时候,浏览器都提示有语法错误,这个不知道楼主用哪个浏览器运行的呢?
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='')
这样可以?那我理解的意思是,不会在每次调用这个函数的时候,第二个参数都被赋初值了吧。。。
那这样的话,还需要后面的两个参数吗?
再加一句,我这边这样运行的时候,浏览器都提示有语法错误,这个不知道楼主用哪个浏览器运行的呢?
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;
}
按我自己的理解改动了一点,楼主参考!