Estoy tratando de construir una caja registradora (un proyecto de algoritmo en FreeCodeCamp) y he creado una función (giveChange(), una función recursiva) para ser invocada en otra función separada (checkCashRegister).
Sin embargo, la función no está siendo llamada. Me gustaría que la función checkCashRegister devuelva 0 en mi caso.
Verifiqué si es el problema de colocar "return" en el lugar equivocado en for loop o problemas de alcance. Tampoco parece.
function giveChange(diff, cid) { for(let i = cid.length - 1; i > 0; i--) { if(cid[i-1][0] <= diff && diff <= cid[i][0]) { diff = diff - Math.min(cid[i-1][1], cid[i-1][0]*Math.ceil(((diff-cid[i-1][0])/cid[i-1][0]))) if(diff !== 0) { giveChange(diff, cid) } else { return diff } } } return diff } function checkCashRegister(price, cash, cid) { let diff = cash - price cid[0][0] = 0.01 cid[1][0] = 0.05 cid[2][0] = 0.1 cid[3][0] = 0.25 cid[4][0] = 1 cid[5][0] = 5 cid[6][0] = 10 cid[7][0] = 20 cid[8][0] = 100 giveChange(diff, cid) return diff } checkCashRegister(3.26, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]])Te falta la palabra clave return antes de invocar givechange(diff, cid) ,
Nota: actualicé la condición y usé un ternario para no repetir la palabra clave de return
function giveChange(diff, cid) { for (let i = cid.length - 1; i > 0; i--) { if (cid[i - 1][0] <= diff && diff <= cid[i][0]) { diff = diff - Math.min(cid[i - 1][1], cid[i - 1][0] * Math.ceil(((diff - cid[i - 1][0]) / cid[i - 1][0]))) return diff !== 0 ? giveChange(diff, cid) : diff } } console.log(diff) return diff } function checkCashRegister(price, cash, cid) { let diff = cash - price cid[0][0] = 0.01 cid[1][0] = 0.05 cid[2][0] = 0.1 cid[3][0] = 0.25 cid[4][0] = 1 cid[5][0] = 5 cid[6][0] = 10 cid[7][0] = 20 cid[8][0] = 100 return giveChange(diff, cid) } checkCashRegister(3.26, 100, [ ["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100] ])