Can memoization be applied to any recursive algorithm?
Memoization can be applied to any function.  Whether it helps with a given program or not depends on how often the function is called with the same parameters.

You don't specify what your recursive solution is.  Typically for this problem is imagine something like

change(total, denominations) = sum of change(total - k m, denominations \ m) where m = max(denominations) over k m &lt;= total


Can change be called with the same arguments more than once?  Yes.  For instance if you're trying to make change for $1 you might take two quarters and one dime or you might take no quarters and six dimes.  In either case you'll next be asking for the numbers of ways to make forty cents with a dime and a nickel.  So you can save something by calculating this once and storing the result.