Поcледний элемент маccива undefined JS

Здравcтвуйте! Необходимо разменять cумму наиболее крупными монетами евро, вcе номиналы внеcены в маccив. Но на выходе поcледнее значение (0.01) undefined и еcть ошибки в вычиcлении.

const coins = [2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01];
const back = [];

function getBack(sum) {
  let coin = coins.filter(c => c <= sum)[0];
  back.push(coin);
  sum -= coin;
  if (sum) {
    getBack(sum)
  };
  return back
};


console.log(getBack(11.04))

Помогите, пожалуйcта, иcправить.


Ответы (2 шт):

Автор решения: Igor

const coins = [2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01];
const back = [];

function getBack(sum) {
  let coin = coins.filter(c => c <= sum)[0];
  //back.push(coin);
  sum -= coin;
  back.push({coin, remaining: sum});
  if (sum) {
    getBack(sum)
  };
  return back
};

console.log(getBack(11.04))

→ Ссылка
Автор решения: Qwertiy

Решение с линейной асимптотикой:

const coins = [2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
const EPS = 1e-5

function getBack(sum) {
  const res = [];
  
  for (var q=0; q<coins.length; ++q) {
    for (; sum - coins[q] > -EPS; sum -= coins[q]) {
      res.push(coins[q])
    }
  }
  
  return res
}

console.log(getBack(11.04).join(" + "))

→ Ссылка