n개의 항목 중에서 r개의 항목을 선택하는 문제재귀 함수를 이용해 경우의 수를 계산function combination(n, r) {
if (r === 0 || n === r) return 1; // 종료 조건
return combination(n - 1, r - 1) + combination(n - 1, r);
}
// 예제 실행
console.log(combination(3, 2)); // 출력: 3
n개의 항목 중 r개를 선택하는 조합의 수를 계산해 반환1. A를 포함하는 경우
남은 구슬(B, C) 중에서 1개를 더 선택
→ combination(2, 1)
2. A를 포함하지 않는 경우
남은 구슬(B, C) 중에서 2개를 선택
→ combination(2, 2)
이렇게 문제를 작은 문제들로 쪼개서 해결
재귀 함수는 종료 조건이 필요
종료 조건은 더 이상 선택할 필요가 없거나 모든 항목을 전부 선택해야 하는 경우입
r === 0
n === r
if (share === 0 || balls === share) return 1;
share === 0:
balls === share:
return solution(balls - 1, share - 1) + solution(balls - 1, share);
각 호출에서는 두 가지를 선택
현재 구슬을 포함하는 경우
호출:
solution(balls - 1, share - 1)
현재 구슬을 포함하지 않는 경우
호출:
solution(balls - 1, share)
combination(3, 2)
├─ combination(2, 1)
│ ├─ combination(1, 0) → 1 반환 (r === 0)
│ └─ combination(1, 1) → 1 반환 (n === r)
│ 결과: 1 + 1 = 2
└─ combination(2, 2) → 1 반환 (n === r)
최종 결과: 2 + 1 = 3
combination(3, 2)이 호출되면:
combination(2, 1)에서는:
결과: 1 + 1 = 2
combination(2, 2)에서는:
남은 구슬을 모두 선택해야 하므로 1을 반환
최종적으로 combination(3, 2)의 결과는:
2 + 1 = 3