NAME
Keyword::TailRecurse - Enables true tail recursion
SYNOPSIS
use Keyword::TailRecurse;
sub fibonacci {
my ( $count, $previous, $current ) = @_;
return ( $previous // 0 ) if $count <= 0;
$current //= 1;
tailRecurse fibonacci ( $count - 1, $current, $previous + $current );
}
print fibonacci( 7 );
DESCRIPTION
Keyword::TailRecurse provides a tailRecurse keyword that does proper tail
recursion that doesn't grow the call stack.
USAGE
After using the module you can precede a function call with the keyword
tailRecurse and rather adding a new entry on the call stack the function
call will replace the current entry on the call stack.
Sub::Call::Tail compatability
If compatibility with Sub::Call::Tail is required then you can use the
subCallTail flag to enable the tail keyword.
use Keyword::TailRecurse 'subCallTail';
sub fibonacci {
my ( $count, $previous, $current ) = @_;
return ( $previous // 0 ) if $count <= 0;
$current //= 1;
tail fibonacci ( $count - 1, $current, $previous + $current );
}
print fibonacci( 7 );
Note: with Sub::Call:Tail compatibility enabled both the tailRecurse and
tail keywords are available.
REQUIRED PERL VERSION
Keyword::TailRecurse requires features only available in Perl v5.14 and
above. In addition a Keyword::TailRecurse dependency doesn't work in Perl
v5.20 due to a bug in regular expression compilation.
SEE ALSO
-
An
XSmodule that provides a form of tail recursion - limited to recursing into the same function it's used from. -
An
XSmodule that provides a generic tail recursion.
LICENSE
Copyright (C) Jason Cooper.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Jason Cooper JLCOOPER@cpan.org