나눗셈 대신에 fractions 모듈을 사용하면 유리수를 정확하게 다룰 수 있다.
from fractions import Fraction
Fraction(factorial(n), (factorial(m)*factorial(n-m)))
def factorial(n: int, dp=None) -> int:
if dp is None:
dp = [0] * (n + 1)
if n <= 1:
return 1
if dp[n] != 0:
return dp[n]
dp[n] = n * factorial(n - 1, dp)
return dp[n]
print(factorial(5)) # 120