Expand description
Tailcall is a library that adds safe, zero-cost tail recursion to stable Rust.
Eventually, it will be superseded by the become
keyword.
Usage
To guarantee that recursive calls a function will reuse the same stack frame,
annotate it with the tailcall
attribute.
use tailcall::tailcall;
fn factorial(input: u64) -> u64 {
#[tailcall]
fn factorial_inner(accumulator: u64, input: u64) -> u64 {
if input > 0 {
factorial_inner(accumulator * input, input - 1)
} else {
accumulator
}
}
factorial_inner(1, input)
}
Recursive calls which are not in tail form will result in a compile-time error.
ⓘ
use tailcall::tailcall;
#[tailcall]
fn factorial(input: u64) -> u64 {
if input > 0 {
input * factorial(input - 1)
} else {
1
}
}
Modules
- This module provides a simple, zero-cost trampoline. It is designed to be used by the
tailcall
macro, but it can also be used manually.
Attribute Macros
- Transforms a function definition so that all recursive calls within the body are guaranteed to use a single stack frame (via tail recursion).