Мог бы и поискать в инете :)
Но попытаюсь объяснить:
это называется "динамическое программирование". На примере с купюрами:
Попробуем определить необходиму функцию рекурсивно:
coins = [1,2,5,10,25,50,100]
-- количество монет для размена суммы
define amount(sum):
if (sum <= 0): resut...