a general algorithm design technique for solving problems defined by or formulated as recurrences with overlapping sub instances
an approach to writing algorithms in which a problem is solved using solutions to the same problem on smaller instances.
a technique that avoids the recursive explosion by recording answers in a table.