Como encontrar todas as combinações de moedas quando determinado valor em dólar

Eu encontrei um pedaço de código que eu estava escrevendo para a entrevista de alguns meses atrás.

De acordo com o comentário que eu tinha, estava tentando resolver esse problema:

Dado algum valor em dólar em centavos (por exemplo, 200 = 2 dólares, 1000 = 10 dólares), encontre todas as combinações de moedas que compõem o valor em dólar. Existem apenas moedas de um centavo (1 ¢), níquel (5 ¢), moedas (10 ¢) e quartos (25 ¢) permitidos.

Por exemplo, se 100 foi dado, a resposta deve ser:

4 quarter(s) 0 dime(s) 0 nickel(s) 0 pennies  
3 quarter(s) 1 dime(s) 0 nickel(s) 15 pennies  
etc.

Acredito que isso pode ser resolvido de maneira iterativa e recursiva. Minha solução recursiva é bastante bugs, e eu queria saber como outras pessoas resolveriam esse problema. A parte difícil desse problema foi torná-lo o mais eficiente possível.

questionAnswers(30)

yourAnswerToTheQuestion