Memoization
Memoization stores previously computed results.
It is commonly implemented using a hash map, object, or array.
It is useful for overlapping recursive subproblems.
It generally trades additional memory for improved execution time.
It is a top-down dynamic programming approach.