[python] 팩토리얼 3가지 방법

ParkCode·2024년 3월 28일

알고리즘 공부

목록 보기
4/5

1. 팩토리얼 재귀


제귀 함수를 이용해서 팩토리얼을 구할 수 있습니다.

예시로 팩토리얼을 간단하게 보면 팩토리얼은 자기를 포함하여 하나씩 작은 수를 곱해가면서 1까지 곱해나가는 것을 말합니다.

0! = 1
1! = 1이고
3! = 3 x 2 x 1입니다.
N!은 N x (N-1) x (N-2) x .... 3 x 2 x 1입니다.

❇️ factorial(5)를 호출해서 n이 1이 될 때까지 재귀호출하면 다음과 같은 모양이 됩니다.

이제 if n == 1:을 만나서 factorial 함수가 1을 반환합니다. 그 뒤 1과 2를 곱해서 2를 반환하고, 3과 2를 곱해서 6을 반환하고, 4와 6을 곱해서 24를 반환하고, 5와 24를 곱해서 120을 반환하게 됩니다.

이것을 코드 만들게 되면 아래와 같습니다.
N > 1 큰 경우에는 N을 곱하고, 그 후에 N에서 값을 하나씩 빼주면서 다시 함수를 호출해서 곱하도록 하고 N <=1 인 경우 빠져나오게 하면 됩니다.

def factorial_recursion(n):
    if n > 1:
        return n * factorial_recursion(n-1)
    else:
        return 1


result0 = factorial_recursion(0)  # 0! = 1
result1 = factorial_recursion(1)  # 1! = 1
result2 = factorial_recursion(2)  # 2! = 2 * 1
result3 = factorial_recursion(3)  # 3! = 3 * 2 * 1
result4 = factorial_recursion(4)  # 4! = 4 * 3 * 2 * 1
result5 = factorial_recursion(5)  # 5! = 5 * 4 * 3 * 2 * 1

print(f'factorial(0) : {result0}')
print(f'factorial(1) : {result1}')
print(f'factorial(2) : {result2}')
print(f'factorial(3) : {result3}')
print(f'factorial(4) : {result4}')
print(f'factorial(5) : {result5}')

[결과]

이렇게 재귀를 이용해서 팩토리얼을 만들 수 있습니다.

2. 파이썬 팩토리얼 반복


반복문을 통해서도 팩토리얼을 만들 수 있습니다.
N! 은 N x (N-1) x (N-2)... 3 x 2 x 1인데 이걸 거꾸로 보면 N! 은 1 x 2 x 3 x ... (N-2) x (N-1) x N입니다. 즉, 1부터 계속해서 N까지 증가하면서 곱하는 것입니다. 이 성질을 이용해서 반복문을 통해서 구하면 됩니다.

이것은 파이썬 range를 이용하여 1 ~ N까지를 나타내려면 range(1, N+1)으로 범위를 나타낼 수 있기 때문에 range 함수와 for 반목문을 합치게 되면 손쉽게 반복문을 통해서 팩토리얼 구현할 수 있습니다.

아래는 예시 코드입니다.

def factorial_range(n):
    result = 1
    for val in range(1, n + 1):  # 1 ~ n 까지
        result *= val
    return result


result0 = factorial_range(0)  # 0! = 1
result1 = factorial_range(1)  # 1! = 1
result2 = factorial_range(2)  # 2! = 1 * 2
result3 = factorial_range(3)  # 3! = 1 * 2 * 3
result4 = factorial_range(4)  # 4! = 1 * 2 * 3 * 4
result5 = factorial_range(5)  # 5! = 1 * 2 * 3 * 4 * 5

print(f'factorial(0) : {result0}')
print(f'factorial(1) : {result1}')
print(f'factorial(2) : {result2}')
print(f'factorial(3) : {result3}')
print(f'factorial(4) : {result4}')
print(f'factorial(5) : {result5}')

[결과]

range와 for 반복문을 이용해서 factorial 값을 구해 보았습니다.

3. 파이썬 math.factorial 함수


파이썬의 math 라이브러리에 factoral 함수가 있습니다.
라이브러리 : math
함수 사용법: math.factorial(n)
입력 : 구하고자 하는 팩토리얼 n의 값을 입력합니다.
반환 : n! 결과값을 정수로 반환합니다.

💡주의 : n은 0보다 작은 음수인 경우 error를 반환합니다.

아래는 예시 코드입니다.

import math

result0 = math.factorial(0)
result1 = math.factorial(1)
result2 = math.factorial(2)
result3 = math.factorial(3)
result4 = math.factorial(4)
result5 = math.factorial(5)

print(f'math.factorial(0) : {result0}')
print(f'math.factorial(1) : {result1}')
print(f'math.factorial(2) : {result2}')
print(f'math.factorial(3) : {result3}')
print(f'math.factorial(4) : {result4}')
print(f'math.factorial(5) : {result5}')

[결과]

import math를 통해서 math 라이브러리를 임포트하고, 그 후에 math.factorial(n)에 숫자만 넣으면 알아서 팩토리얼을 구하게 됩니다.

이상으로 파이썬에서 팩토리얼을 구하는 3가지 방법(재귀, 반복, 함수)이였습니다.


참조

파이썬 자습서

profile
프론트엔드 개발자

0개의 댓글