Итак, вот набросок будущей программы:
Perlsub sqPhones { my $n=shift; return ('') unless $n; my @sqPhones; ❶ заполнение массива@sqPhones
return @sqPhones; } print "$_\n" for sqPhones(shift);
Вставка ❶, посвящённая
заполнению массива @sqPhones
, как уже обсуждалось, содержит
два вложенных цикла:
Perlfor(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
). И то, и другое понадобится в теле внешнего
цикла. Заголовок внутреннего цикла более ясный. Первая команда в теле
внутреннего цикла добавляет дефис перед хвостом, но только если он не пуст.