"Без циклов, так без циклов", - в ответ подумал я.
В качестве примера рассмотрим сложение элементов массива.
my @vector = 1 .. 5;
# Вариант с циклом.
{
my $sum = 0;
$sum += $_ for @vector;
print $sum, "\n";
}
# Вариант без цикла.
{
sub sum {
my ($h, @t) = @_;
@t ? $h + sum(@t) : $h;
}
print sum(@vector), "\n";
}
Вот так просто можно обойтись без циклов, используя рекурсию.
Интересно, а вдруг и завтра я буду разбужен мыслью: "сегодня без ...", и это "без ..." будет намного сложней?
Но, как говориться, утро вечера мудренее.
2 комментария:
с таким суммированием рискуете уперется в глубину стека. И по скорости оно явно медленнее. В первом случае компилятору очень легко соптимизировать, в отличие от второго
To lariq.
Знаю. Смотрите следующую заметку.
Отправить комментарий