Сегодня я не был разбужен мыслью: "сегодня без ...".
Сегодня меня разбудило порицание: "а-я-яй, рекурсия..., а где же tail call оптимизация?!"
- Отстань, - отвечаю я: в perl нет поддержки tail call оптимизации".
- В perl5 - да, но в perl6 будет!
- Ладно, вот вариант с оптимизаций:
my @vector = 1 .. 5;
sub _sum {
my ($s, $h, @t) = @_;
@t ? _sum($s + $h, @t) : $s + $h;
}
sub sum { _sum(0, @_) }
print sum(@vector), "\n";
Краткое пояснение к коду: tail call оптимизация используется когда функция завершается вызовом другой.
Сильно подозреваю, что завтра будет продолжение! :-)
Комментариев нет:
Отправить комментарий