// Recursive algo is different from Binomial Identity // Given coins[k] = {2, 3, 4} and change s = 9 // Count the number of way for coin change // coins[k] is in the each change // coins[k] is not in the each change // count(coins, k, s) = count(coins, k-1, s) + count(coins, k, s-coins[k]) public static int count(int[] coin, int s, int k) { if( s < 0) return 0; else if( s == 0 ) return 1; else if( s > 0 && k > 0) { int left = count(coin, s, k-1); int right= count(coin, s-coin[k-1], k); return left + right; } else return 0; }