Цель состоит в том, чтобы определить, равна ли любая комбинация целых чисел в массиве наибольшим целым числом в массиве.JavaScript Recursion
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, однако она продолжает рекурсию. Может кто-нибудь объяснить?
Хорошо. Я не понимал, что он сохраняет значения переменных, поскольку он продолжал выполнять левую часть оператора или. Создает ли это закрытие, не заканчивая заявление? Или просто в резервном копировании в строке стека вызовов? Или оба? –
@MattLarsh: параметры и переменная 'n' являются локальными для функции, поэтому каждый вызов функции получает свой собственный набор из них. Точно так же, как это реализовано в Javascript, не определено, но оно имеет тот же эффект, что и параметры, которые нажимаются на стек для вызова, и комната помещается в стек для переменной 'n'. – Guffa