sub fib
{
my $n = shift;
my($s1,$s2,$return);
while(1)
{
if ( $n < 2 ) {
return $n;
} else {
if ( $BRANCH == 0 ) {
$return = fib($n-2);
} elsif ( $BRANCH == 1 ) {
$s1 = $return;
$return = fib($n-1);
} elsif ( $BRANCH == 2 ) {
$s2 = $return;
$return = $s1 + $s2;
}
}
}
}
но ведь это же не работает ни разу, потому что переменная
$BRANCH
при любом вызове равна нулю ! wtf ?И самое главное - зачем это все, если можно обойтись без рекурсии вот примерно так:
sub fib
{
my $n = shift;
my $f1 = 0;
my $f2 = 1;
return 1 if ( $n < 2 );
my $tmp;
for ( my $i = 1; $i < $n; $i++ )
{
$tmp = $f2 + $f1;
$f2 = $f1;
$f1 = $tmp;
}
return $f1 + $f2;
}
Комментариев нет:
Отправить комментарий