我正在做一个需要递归的问题,用于计算加起来达到一定数量的硬币组合。有效的解决方案如下。困扰我几个小时的一件事是,当我没有在 for 循环中声明 var i = 0 时,它不起作用。据我了解,当我在 for 循环中声明 var 时,它停留在该范围内,就好像我不这样做一样,它是从全局中拉出来的吗?有人可以向我解释为什么这个算法在 jsfiddle.net 上不起作用,除非我在 for 循环中声明 var i = 0。感谢任何可以提供帮助的人。
var coins = [1, 2, 5, 10, 20, 50, 100];
var ways = 0;
function combo(index,amount) {
//if I write for(i=0;...;i++) it doesn't work
for (var i = 0; i <= Math.ceil(amount / coins[index]); i++) {
amountleft = amount - (i * coins[index]);
if (amount < 0) {
break;
}
if (amountleft == 0) {
ways ++;
break;
}
if (amountleft > 0) {
combo(index + 1,amountleft);
}
}
}
combo(0,50)
console.log(ways)
最佳答案
是的。
你的假设是正确的。如果省略 var
,则该变量将是全局变量(或抛出错误,具体取决于您的浏览器)。
如果你的函数是递归的,当来自堆栈中不同位置的循环正在改变(并依赖于迭代)同一个变量时,显然会有干扰。
关于Javascript:为什么我需要在 for 循环中声明 var i = 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33821196/