pub fn nth_recaman_memoized(n: usize) -> u128 {
let mut memoizer = vec![0];
nth_recaman_with_memoizer(n, &mut memoizer)
}
fn nth_recaman_with_memoizer(n: usize, memoizer: &mut Vec<u128>) -> u128 {
if memoizer.len() <= n {
let mth_recaman = nth_recaman_with_memoizer(n - 1, memoizer);
let nth_recaman =
if mth_recaman > n as u128 && !memoizer.contains(&(mth_recaman - n as u128)) {
mth_recaman - n as u128
} else {
mth_recaman + n as u128
};
memoizer.push(nth_recaman);
}
memoizer[n]
}
pub fn recaman_sequence(n: usize) -> Vec<u128> {
let mut sequence = vec![0];
nth_recaman_with_memoizer(n - 1, &mut sequence);
sequence
}