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

Felix阳 2012-12-03 05:35:20
	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循环嵌套可以解决排列的问题。但是那种写代码太多了。必须用递归完成。大神帮忙啊。
...全文
170 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
张运领 2012-12-03
  • 打赏
  • 举报
回复
    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;
}
按我自己的理解改动了一点,楼主参考!
张运领 2012-12-03
  • 打赏
  • 举报
回复
看完不说其他问题,我表示,我真是没有见过这样定义函数的。。。 function range(arr,k=0,str='') 这样可以?那我理解的意思是,不会在每次调用这个函数的时候,第二个参数都被赋初值了吧。。。 那这样的话,还需要后面的两个参数吗? 再加一句,我这边这样运行的时候,浏览器都提示有语法错误,这个不知道楼主用哪个浏览器运行的呢?

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧