我试图理解我为一个问题找到的解决方案:“给你不同面额的硬币和总金额。编写一个函数来计算构成该金额的组合数量。你可以假设你有无限每种硬币的数量。”
我的问题是,如果我使用 change(3,[2]) 运行该函数,为什么它会吐出 0。我无法理解在单个递归调用 currentCoin 之后如何变得未定义,然后当程序到达 for在该调用中循环,它不会再次使用total += change(amount - 0 * undefined, coins.slice(0, -1)). 为什么它不会因无限递归调用change(NaN,[])或coins.slice(0,-1)在空数组上使用而崩溃。在 for 循环中似乎忽略了这一点。
我是否误解了 for 循环的工作原理?
var change = function(amount, coins) {
if(amount == 0) return 1;
let currentCoin = coins[coins.length - 1];
let total = 0;
for(let qty = 0; qty * currentCoin <= amount; qty++){
total += change(amount - qty * currentCoin, coins.slice(0, -1))
}
return total;
};
console.log(change(3,[2]))
慕的地10843
千巷猫影
慕的地6264312
凤凰求蛊
相关分类