среда, 6 мая 2009 г.

Сегодня без циклов

Сегодня мое пробуждение от сладкого сна было грубо и бесцеремонно нарушено невесть откуда прилетевшей мыслью: "сегодня без циклов"!

"Без циклов, так без циклов", - в ответ подумал я.

В качестве примера рассмотрим сложение элементов массива.

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 комментария:

alariq комментирует...

с таким суммированием рискуете уперется в глубину стека. И по скорости оно явно медленнее. В первом случае компилятору очень легко соптимизировать, в отличие от второго

Nick комментирует...

To lariq.
Знаю. Смотрите следующую заметку.