+ -
当前位置:首页 → 问答吧 → 这个for循环如何改成递归的?会递归的话应该很简单

这个for循环如何改成递归的?会递归的话应该很简单

时间:2011-03-24

来源:互联网

作用是对一个矩阵(每行的列数不等),输出组合
比如下面的xx()输出:
1,4,7
1,4,8
1,4,9
1,5,7
1,5,8
1,5,9
2,4,7
2,4,8
2,4,9
2,5,7
2,5,8
2,5,9
3,4,7
3,4,8
3,4,9
3,5,7
3,5,8
3,5,9


sub xx {
my $fldEnum;
push(@$fldEnum,[1,2,3]);
push(@$fldEnum,[4,5]);
push(@$fldEnum,[7,8,9]);
for my $i(0..$#{$fldEnum->[0]}) {
  for my $j(0..$#{$fldEnum->[1]}) {
  for my $k(0..$#{$fldEnum->[2]}) {
print "$fldEnum->[0][$i],$fldEnum->[1][$j],$fldEnum->[2][$k]\n";
}
  }
}
}


现在是我fldEnum里的行数会变化,应该要用到递归才知道,因为用for循环需要事先知道行数,写在代码里。
我觉得换成递归应该不难,可是我真不会递归,一点也不会。。。

谢谢

作者: samansakk   发布时间: 2011-03-24

[[1],[2],[3]]

#1 迭代[4,5]把每个item push入以上的每个元素变成:

[[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]

#2 迭代[7,8,9]做和#1相同的操作。最终结果就出来了:

[[1,4,7],[1,4,8],[1,4,9]......]

作者: foolbirdflyfirst   发布时间: 2011-03-24

谢谢。不过我想你没明白。
如果我有 [11,12,13.。。]又一个数组的话。 这样又需要再迭代了。现在是我在写代码的时候,差不知道有多少个这种数组需要迭代,所以需要用递归的吧。

引用 1 楼 foolbirdflyfirst 的回复:
[[1],[2],[3]]

#1 迭代[4,5]把每个item push入以上的每个元素变成:

[[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]

#2 迭代[7,8,9]做和#1相同的操作。最终结果就出来了:

[[1,4,7],[1,4,8],[1,4,9]......]

作者: samansakk   发布时间: 2011-03-24