gpt4 book ai didi

javascript - 递归函数打破if语句javascript

转载 作者:行者123 更新时间:2023-11-28 01:39:37 27 4
gpt4 key购买 nike

我正在尝试编写一个函数,将金额转换为指定数量的硬币。为此,我调用了一个函数本身(我认为这是递归编程?)。我有两个问题。

  1. 当我在 if 语句的 else 部分中调用函数本身时,我收到错误消息。 “超出最大调用堆栈大小”?不知道为什么会这样,因为上面的调用是相同的,并且当第二个调用被注释掉时工作正常。

  2. 此外,当第二个调用被注释掉并且函数运行时,变量 total 应在每次调用时增加 1。然而它并没有超过 1。我认为这可能是因为每次调用时变量都在顶部重置为 0。然而,remainder 变量也设置为 0,每次都会减少其值。

谁能解释一下这里发生了什么?这个问题如何最好地解决?

谢谢

function amountCoins(amt, coins) {

var remainder = 0;
total = 0;

if(amt >= coins[0]) {
total += 1;
remainder = (amt - coins[0]);
return amountCoins(remainder, coins);
} else {
coins.shift();
//return amountCoins(remainder,coins);

}
alert(total);
}

amountCoins(121,[20,15,6,1]);

最佳答案

您可以使用 .reduce() 作为替代方案。

而且我们实际上并不需要简单数学就能处理的循环。

var total = [20,15,6,1].reduce(function(obj, denomination) {
return {
total: obj.total + Math.floor(obj.amount / denomination),
amount: obj.amount % denomination
};
}, {amount:121, total:0}).total;
<小时/>

或者迭代数组。

var arr = [20,15,6,1], amount = 121, total = 0;

for (var i = 0; i < arr.length; ++i) {
total += Math.floor(amount / arr[i]);
amount %= arr[i];
}

关于javascript - 递归函数打破if语句javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21078761/

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