【发布时间】:2016-08-10 12:53:04
【问题描述】:
递归如何解决看似复杂的问题似乎很神奇,我正在阅读this 论文,它很好地解释了这个算法。这是我在 javascript 中的代码:
function allButLast(arr) {
return arr.slice(0, arr.length - 1);
}
function sSum(arr, sum) {
//console.log(arr + ':' + sum);
if (sum === 0) return true;
if (sum < 0 || arr.length === 0) return false;
return sSum(allButLast(arr), sum) || sSum(allButLast(arr), sum - arr.slice(-1));
}
/*
sSum([1, 2], 3)
sSum([1], 3) || sSum([1, 2], 1)
sSum([], 3) || sSum([], 2) || sSum([1, 2], 1)
false || sSum([], 2) || sSum([1, 2], 1)
false || false || sSum([1, 2], 1)
false || false || sSum([1], 1) || sSum([1], 1)
false || false || sSum([], 1) || sSum([], 0) || sSum([1], 1)
false || false || false || true || sSum([1], 1) // evaluation stops here
*/
//console.log(sSum([1, 2], 3)); // true
我想了解和调试我在评论中记录的函数调用,我想知道这是否是调用的执行方式以及我是否正确跟踪它?
【问题讨论】:
标签: algorithm recursion subset-sum