perl中递归实现多层for循环嵌套(问题)
问题描述:有三个数组,假设为@A={1,2},@B={2,3},@C={1,2,3},要实现每次从这三个数组中各取一个成员组成一种组合,列出所有的组合情况,按照数学公式也...
问题描述:有三个数组,假设为@A={1,2},@B={2,3},@C={1,2,3},要实现每次从这三个数组中各取一个成员组成一种组合,列出所有的组合情况,按照数学公式也就是2*2*3=12种组合。但实际情况中,数组个数不定,我先是将所有数组名放在一个数组里,@attrname={A,B,C};然后他们的成员放在一个数组里,@select={1,2,2,3,1,2,3};每个数组的成员个数放在数组@eachnum={2,2,3}中。
也就是,问题的条件为已知@attrname @select @eachnum这三个数组,求出@attrname中所有数组名每个数组各取一个成员的所有组合。(用递归算法),先多谢大神了! 展开
也就是,问题的条件为已知@attrname @select @eachnum这三个数组,求出@attrname中所有数组名每个数组各取一个成员的所有组合。(用递归算法),先多谢大神了! 展开
展开全部
你这题很怪,而且要求上没有意义。
首先:{1,2}这是hash表的表示方法,前面应该是%A,如果用数组,应该用@AA=(1,2)。
第二:数据不固定没有关系,可以使用2维数组就行了。
第三:非要指定3个数据的话,第一个数组@attrname=(A,B,C)这个是没有意义的,实际上用不到。
第四:这个不方便使用递归。直接循环嵌套就可以了。
首先:{1,2}这是hash表的表示方法,前面应该是%A,如果用数组,应该用@AA=(1,2)。
第二:数据不固定没有关系,可以使用2维数组就行了。
第三:非要指定3个数据的话,第一个数组@attrname=(A,B,C)这个是没有意义的,实际上用不到。
第四:这个不方便使用递归。直接循环嵌套就可以了。
更多追问追答
追问
因为我这里举得是三个数组的例子,如果是四个 五个呢,所以我觉得必须要用递归。你说的{1,2}难道不能给数组初始化吗?很多语言都这么表示吧
追答
你没搞明白循环和递归的区别啊。。。。
递归是定义一个函数,然后它自己去调用它自己。。。。。
用二维数据的话,原题:
a[0][0]=1;
a[0][1]=2;
a[1][0]=2;
a[1][1]=3;
a[2][0]=1;
a[2][1]=2;
a[2][2]=3;
照这样排下去,你排到100也没问题啊!
2014-10-16
展开全部
我用其他语言写的,不知你看的懂没。
str[10000];
function digui(j){
if(j<0 || j>3){
return;
}
if(j==3){
echo str;
return;
}
for(i=0;i<count(attrname[j]);i++){
str[j]=attrname[j][i];
digui(j+1);
}
}
digui(0)就会输出所有组合。
str[10000];
function digui(j){
if(j<0 || j>3){
return;
}
if(j==3){
echo str;
return;
}
for(i=0;i<count(attrname[j]);i++){
str[j]=attrname[j][i];
digui(j+1);
}
}
digui(0)就会输出所有组合。
追问
你的大体思路我可以弄懂,但是有点不明白。上面的递归会经历三个for嵌套,当j=3时 就打印一种结果,那样就应该结束了,怎么能确保跑遍所有for中可能。可能我说的不是很清楚吧,你看看这个http://bbs.csdn.net/topics/330137968。目前我就是按照你上面的方式写的,但是出现了和链接一样的情况
追答
不会吧,你没写对吧,发来看看,调用函数一定是digui(0)哦,那个连接的人是大笨蛋,x是全局变量,如果x变为2了,那么返回上一层时也是2,所以直接跳出循环了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询