gpt4 book ai didi

Javascript 递归调用产生幽灵结果

转载 作者:行者123 更新时间:2023-12-03 09:20:21 26 4
gpt4 key购买 nike

我正在创建一个名为changeCounter 的函数。它接受一个整数并返回一个数组,changeDue,其中正确的账单变化从最高到最低排序。示例:

    changeCounter(13)
changeDue = [["TEN", 10], ["ONE", 1], ["ONE", 1], ["ONE", 1]]

我创建的递归函数对于 5 以内的数字按预期工作。大于 5 的数字会返回额外的账单。换句话说,当 due = 0 时它不会停止。我已经尝试了很多变体。我希望得到有关问题所在的反馈。

var changeDue = [];
var bills = [["ONE HUNDRED", 100],["TWENTY", 20],["TEN", 10],["FIVE", 5],["ONE", 1]];

function changeCounter(due) {
for(var i = 0; i < bills.length; i++) {
if(due >= bills[i][1] && due > 0) { // Should stop recursive loop here when due = 0!
changeDue.push(bills[i]);
console.log(due - bills[i][1]); // debug
changeCounter(due - bills[i][1]);
}
}
return changeDue;
}


console.log(changeCounter(8));

输出:

> [["FIVE", 5], ["ONE", 1], ["ONE", 1], ["ONE", 1], ["ONE", 1], ["ONE",
> 1], ["FIVE", 5]...]

返回一个包含 17 个元素的数组。应该只返回前 4 个元素。

最佳答案

您在 for 循环内调用递归,找到一个更好的位置来放置它,或者只是使用 while 循环。

function changeCounter(due) {
var due = due,
nextBill;
while (due > 0) {
nextBill = bills.reduce(function (acc, bill) {
if (!acc && due >= bill[1]) acc = bill;
return acc;
}, false);
due = due - nextBill[1];
changeDue.push(nextBill);
}
}

关于Javascript 递归调用产生幽灵结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31858661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com