递归函数未在另一个函数中调用的潜在问题
Potential issues for recursive function not being called in another function
我正在尝试构建一个收银机(FreeCodeCamp 中的一个算法项目)并且我已经创建了一个函数(giveChange(),一个递归函数)以在另一个单独的函数(checkCashRegister)中调用。
但是,函数没有被调用。在我的例子中,我希望函数 checkCashRegister 为 return 0。
查了下是for循环中"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])))
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]])
您在调用 givechange(diff, cid)
、
之前缺少 return
关键字
注意:我已经更新了条件并使用三元来不重复 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]
])
我正在尝试构建一个收银机(FreeCodeCamp 中的一个算法项目)并且我已经创建了一个函数(giveChange(),一个递归函数)以在另一个单独的函数(checkCashRegister)中调用。
但是,函数没有被调用。在我的例子中,我希望函数 checkCashRegister 为 return 0。
查了下是for循环中"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])))
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]])
您在调用 givechange(diff, cid)
、
return
关键字
注意:我已经更新了条件并使用三元来不重复 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]
])