1 2 3 4 5 6 7 8 9 10 11 12
fn memoized_fib() -> impl Fn(u32) -> u64 { let mut cache = vec![0u64, 1u64]; move |n: u32| -> u64 { if (n as usize) < cache.len() { cache[n as usize] } else { let val = memoized_fib()(n - 1) + memoized_fib()(n - 2); cache.push(val); val } } }