Разработка

Итак, вот набросок будущей программы:

sub sqPhones
{
	my $n=shift;
	return ('') unless $n;
	my @sqPhones;
	 заполнение массива @sqPhones
	return @sqPhones;
}

print "$_\n" for sqPhones(shift);

Вставка , посвящённая заполнению массива @sqPhones, как уже обсуждалось, содержит два вложенных цикла:

for(my $i=0; (my $h=length(my $head=$i**2))<=$n; $i++)
{
	for my $tail(sqPhones($n-$h))
	{
		$tail="-$tail" if $h<$n;
		push @sqPhones, $head.$tail;
	}
}

Заголовок внешнего цикла выглядит несколько замысловато. Мы попытались, вычисляя условие цикла, вычислить заодно и голову ($head), и её длину ($h). И то, и другое понадобится в теле внешнего цикла. Заголовок внутреннего цикла более ясный. Первая команда в теле внутреннего цикла добавляет дефис перед хвостом, но только если он не пуст.

Информатика-54© А. Н. Швец