def change(n, list_of_coins) change_helper(n, list_of_coins, []) end def change_helper(n, list_of_coins, result_list) if list_of_coins.empty? return [] elsif n == 0 return [result_list] else list_of_coins.each do |coin| if n < coin return [] else return change_helper(n - coin, list_of_coins, result_list + [coin]) + change_helper(n, list_of_coins - [coin], result_list) end end end end