배열의 모든 순열을 생성하는 간단한 재귀 Perl 루틴을 작성하려고합니다. 나는 이것을하기위한 루틴을 제공하는 모듈을 가지고 있지 않으며 그것들을 설치할 수도 없다.Perl을 사용하는 순열
sub permute
{
my @array = @_;
if (@array == 0)
{
return;
}
else
{
my $accum = "";
my $result = permute_with_accumulator($accum, @array);
return $result;
}
}
sub permute_with_accumulator
{
my ($accum, @array) = @_;
if (@array == 1)
{
my $element = $array[0];
$accum .= "$element,";
}
else
{
my $i;
for ($i = 0; $i <= $#array; $i++)
{
$accum .= "$array[$i] ";
my @new_array =();
if ($i == 0)
{
@new_array = @array[1..$#array];
}
elsif ($i == $#array)
{
@new_array = @array[0..$#array-1];
}
else
{
my $lower = $i - 1;
my $upper = $i + 1;
@new_array = @array[1..$lower, $upper..$#array];
}
permute_with_accumulator($accum, @new_array);
}
}
return $accum;
}
을하지만 @array = QW (E1, E2, E3 E4 E5)을 할 때 실행 :
이my $perms = permute(@array);
print ("$perms\n");
출력이 단지
e1 e2 e3 e4 e5
여기 코드는 내가 지금까지 가지고있다
모든 조언을 주시면 감사하겠습니다.
감사합니다.
당신이 CPAN 모듈을 설치할 수없는 경우 '재미라고 생각 Perl의 절반을 잃어 버리고 작업 부하가 3 배가됩니다. 나는 그것을 고칠 것을 권합니다. 그렇지 않으면 더 많은 바퀴를 재발견하고 유지해야 할 것입니다. local :: lib와 같은 것을 사용하여 root없이 모듈을 설치하거나 perlbrew를 사용하여 자신의 Perl 복사본을 컴파일하십시오. – Schwern
그래서 StackOverflow에 코드를 게시하면 괜찮습니다.하지만 CPAN에 게시하면 그렇지 않습니다. – ikegami
저는 랩 컴퓨터에서 일하고 있는데 설치 한 것에 국한됩니다. 나는 아무것도 설치할 수 없다. 내가 할 수있는 한, 순열을위한 루틴을 제공하는 모든 모듈을 "사용"하려고했지만 아무도 사용할 수 없다는 것을 알 수 있습니다. – Schemer