2
目标是查找数组中整数的任意组合是否等于数组中的最大整数。JavaScript递归
function ArrayAdditionI(arr) {
arr.sort(function(a,b){
return a - b;
});
var largest = arr.pop();
function recursion(target,array){
if(array.length === 0){
return target === 0;
}
var n = array[0];
array = array.slice(1);
return recursion(target,array) || recursion(target - n, array);
}
return recursion(largest,arr);
}
此解决方案似乎可行,但我不能跟着它。在递归函数的底部,当它到达OR运算符的右侧时,我认为它几乎总是返回false,但是它会继续递归。有人可以解释吗?
好的。我没有意识到它正在保存变量值,因为它继续执行or运算符的左侧。它是否由于没有完成声明而造成封闭?或者只是在调用堆栈中进行备份?或两者? – 2014-10-11 01:04:14
@MattLarsh:参数和'n'变量在函数中是局部的,所以每次调用函数都会得到它们自己的一组函数。到底如何在Javascript中实现没有定义,但它与调用堆栈中的参数相同,并且在栈中为'n'变量生成空间。 – Guffa 2014-10-11 09:56:34