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

Sub::Call::Recur

An XS module that provides a form of tail recursion - limited to recursing into the same function it's used from.

Sub::Call::Tail

An XS module 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>