재귀가 재현하는 방법이 복잡한 문제를 해결할 수있는 방법에 관한 모든 것이 마법처럼 보입니다.이 알고리즘을 아름답게 설명하는 this 종이를 읽었습니다. 여기에 자바 스크립트에 내 코드입니다 :서브 세트 합계를 추적하는 재귀 스택 추적
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
내가 이해하고 내가 주석에 설명 한 함수 호출을 디버깅, 내가 전화를 실행하는 방법을 그건 알고 싶어하고 싶었다는 내가 제대로 추적입니까?