【发布时间】:2012-08-24 18:39:38
【问题描述】:
该子例程使用从 A 到长度为 N 的字母的第 M 个字母生成字母的字符串组合。
sub genString
{
my($m,$n,$str,$letter,$temp,$i) = @_;
if($n == 0){
$letter = chr(ord("A")+($i+=1));
if($temp == 1){ print "$str\n"; }
else{
for($j = 0 ; $j < temp-1 ; $j++){
if(ord(substr($str,$j,1)) < ord(substr($str,$j+1,1))){$do_print = 1;}
else{
$do_print = 0;
break;
}
}
if($do_print == 1){ print "$str\n"; }
}
}
else{
for($j = ord($letter) ; $j < ord($letter)+$m ; $j++){
genString($m,$n-1,$str.chr($j),$letter,$temp,$i);
}
}
}
&genString($m,$n,$str,"A",$n,0);
示例: 输入:M=4; N=3; 输出:ABC ABD ACD BCD
我在 Ruby 中尝试过与此类似的方法,它可以工作,但在 Perl 中,这是一个无限循环,我不知道为什么。我是 Perl 的新手。我该怎么办? (对不起,如果我的代码有点长)
【问题讨论】:
-
剪切粘贴实际代码会有所帮助
-
temp-1是错字吗?我应该是$temp-1。 -
Perl 中没有
break,你很可能想在那里使用last。 -
请确保您的代码在此处发布之前可以编译。请参阅
perldoc perlrun并阅读有关 -c 开关的信息。
标签: string perl loops recursion subroutine