A way to solve problems which exhibit a specific structure (optimal substructure) where a problem can be broken down into sub-problems which are similar to the original one.

Difference with recursion

Clearly one can use recursion to solve a DP but it is not necessary