technique for efficiently implementing a recursive algorithms by storing partial results. we trade space for time.
a coding approach that aims to eliminate repeated calculations  basic idea: store results that might need to be repeatedly calculated (memoisation)
an approach to writing algorithms in which a problem is solved using solutions to the same problem on smaller instances.