단순 무식한 방법은 이항계수의 정의를 그대로 구현하는 것이다. $_nC_r = \frac{n!}{(r!(n-r)!)}$의 공식을 직접 계산한다.
장점:
단점:
def factorial(n):
if n <= 1:
return 1
return n * factorial(n-1)
def combination_naive(n, r):
if r > n:
return 0
if r == 0 or r == n:
return 1
return factorial(n) // (factorial(r) * factorial(n-r))
# 예시
print(combination_naive(5, 2)) # 10
print(combination_naive(10, 3)) # 120
실제 사용 예시:
n = 5, r = 2인 경우의 계산 과정
파스칼의 삼각형 원리를 이용한 방법이다. 점화식 $_nC_r = _{n-1}C_r + {n-1}C{r-1}$을 활용하여 중복 계산을 피한다.
파스칼의 삼각형 예시:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
장점: