an approach to writing algorithms in which a problem is solved using solutions to the same problem on smaller instances.
a general algorithm design technique for solving problems defined by or formulated as recurrences with overlapping sub instances
a coding approach that aims to eliminate repeated calculations  basic idea: store results that might need to be repeatedly calculated (memoisation)