an approach to writing algorithms in which a problem is solved using solutions to the same problem on smaller instances.
it solves subset of problem and then use that info to solve the more difficult original process
a coding approach that aims to eliminate repeated calculations  basic idea: store results that might need to be repeatedly calculated (memoisation)