A framework for defining recursive problems, that have built-in memoization support.