a technique that avoids the recursive explosion by recording answers in a table.
a coding approach that aims to eliminate repeated calculations  basic idea: store results that might need to be repeatedly calculated (memoisation)
a general algorithm design technique for solving problems defined by or formulated as recurrences with overlapping sub instances