Comecei com o fatorial:
use integer;
sub fact {
my $n=shift;
(sub {1},
sub {
my $n=shift;
$n*fact($n-1);
})[-1*((1-$n)>>31)]->($n);
}
print fact($ARGV[0]);
Eu criei uma função que usa uma lista de referências a funções e decide qual executar conforme o índice -1*((1-$n)>>31). A função da posição zero apenas retorna o valor 1 e a função da posição 1 retorna $n multiplicado pela chamada recursiva à função fact().
A solução é bastante mais simples que a escrita em Java. E também tem uma estrutura que se parece com a notação matemática.
A estrutura para a série de Fibonacci é igual.
use integer;
sub fib {
my $n=shift;
(sub {shift},
sub {
my $n=shift;
fib($n-1)+fib($n-2);
})[-1*((1-$n)>>31)]->($n);
}
print fib($ARGV[0]);
E isso revela que talvez não seja difícil escrever uma função para gerar funções recursivas desse tipo...
Nenhum comentário:
Postar um comentário