The #[reciter] attribute macro allows converting a recursive function into an Iterator, which uses a cache.

Example

```rust

[reciter(cache = "auto", start = 1)]

fn factorial(n: usize) -> BigInt { if n == 1 { BigInt::from(1) } else { n * factorial(n - 1) } }

fn main() { let fi = FactorialIterator::new(); for (i, fac) in fi.enumerate().take(512) { println!("{}! = {}", i + 1, fac); } }
```

For more information about look into the documentation or at the tests in the repository.