#! perl -slw
use strict;
use futures;
sub fibonacci {
my $n = shift;
return $n if $n < 2;
my $r1 = futures->new( \&fib_t1, $n -2 ); #1
my $r2 = futures->new( \&fib_t1, $n -1 ); #2
return $r1 + $r2;
}
sub fib_t1 {
my $n = shift;
return $n if $n < 2;
my $r1 = futures->new( \&fib_t2, $n -2 ); #3 & #5
my $r2 = futures->new( \&fib_t2, $n -1 ); #4 & #6
return $r1 + $r2;
}
sub fib_t2 {
my $n = shift;
return $n if $n < 2;
return fib_t2( $n -2 ) + fib_t2( $n -1 );
}
####
#! perl -slw
use strict;
use futures;
sub fibonacci {
my $n = shift;
return $n if $n < 2;
return fib_t1( $n -2 ) + fib_t1( $n -1 );
}
sub fib_t1 {
my $n = shift;
return $n if $n < 2;
return futures->new(
sub{ futures->new( \&fib_t2, $n-2 ) + futures->new( \&fib_t2, $n-1 ) }
);
}
sub fib_t2 {
my $n = shift;
return $n if $n < 2;
return fib_t2( $n -2 ) + fib_t2( $n -1 );
}
####
sub fibonacci :future {
my $n = shift;
return $n if $n < 2;
return fibonacci( $n -2 ) + fibonacci( $n -1 );
}