Uma construção interessante que não cheguei a usar profissionalmente é a recursão mútua: A() chama B() que chama A() e assim por diante.
Entretanto, pesquisando uma solução recursiva para o Fizzbuzz, ocorreu-me uma estrutura com 3 funções em uma recursão circular. Não tem esse nome no Google, mas parece uma maneira natural de descrever o código que segue.
Teremos uma função para os múltiplos de 3, uma para os múltiplos 5, e uma para o que sobrar. A primeira chama a segunda, que chama a última, que chama novamente a primeira, e segue a loucura.
#!/usr/bin/perl
use strict;
use warnings;
no warnings 'recursion';
sub threes {
my $n=shift || 1;
my $multiple=0;
if($n % 3 == 0) {
print 'fizz';
$multiple=1;
}
fives($n, $multiple);
}
sub fives {
my ($n, $multiple)=@_;
if($n % 5 == 0) {
print 'buzz';
$multiple=1;
}
rest($n, $multiple);
}
sub rest {
my ($n, $multiple)=@_;
print $n if !$multiple;
print "\n";
threes($n+1) if $n<1000;
}
threes();
Parece que ainda há coisas na programação que precisam de nomes.
Nenhum comentário:
Postar um comentário