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