An optimization method that breaks problems into smaller subproblems and solves them recursively, storing results to avoid recomputation.