The coin change problem is a classic dynamic programming problem (unbounded knapsack problem) which can be solved recursively.
N = Coins with different denominations
D = Array of denominations
S = Total amount to make
C = Number of Combinations
C(N, S) = C(N - 1, S) + C(N, S - D[N]);