LIFE

[Python]파이썬 팩토리얼(factorial) 구현 3가지 방법(for/재귀/math)소스 코드

Manniz 2020. 4. 19.

오늘은 파이썬을 이용하여 팩토리얼을 구하는 3가지 방법에 대해서 알아보겠습니다.

방법 하나. for 반복문 사용

방법 둘. 재귀함수 사용

방법 셋. math library 사용

 

 

우선 구현하고자하는 팩토리얼이란 것에 대해 알아야겠죠!?

facorial, 계승 이라고 표현하며, 1부터 지정된 수까지 모든 수의 곱을 의미합니다.

수학 기호로는 '!'를 숫자뒤에 붙여 표시합니다.

 

 

3! = 3 팩토리얼(factorial) = 3의 계승 = 1 X 2 X 3 = 6

5! = 5 팩토리얼(factorial) = 5의 계승 = 1 X 2 X 3 X 4 X 5 =120

★ 0! = 0 팩토리얼(factorial) = 0의 계승 = 1 입니다.

 

이제 본격적으로 파이썬으로 팩토리얼을 구현해보겠습니다.

 


첫번째 파이썬 팩토리얼 구현은 for 반복문을 사용해 보겠습니다.

소스 코드

#for문을 사용한 팩토리얼 소스 코드
a = int(input("팩토리얼을 구할 숫자를 입력하세요 : "))
result = 1
for item in range(1, a+1, 1):
    result *= item      #result = result * item
print(result)

 

실행 결과

 

1. 사용자에게서 입력을 받는다.

2. 결과에 출력할 result변수에 1을 할당한다.

3. 1에서 입력받은 수까지 반복을 수행하며 result에 해당 값을 곱한다.

 

예를 들어 사용자의 입력이 3이라고 한다면

result = 1, 반복문 변수 = 1, result X 반복문변수 = 1

result = 1, 반복문 변수 = 2, result X 반복문변수 = 2

result = 2, 반복문 변수 = 3, result X 반복문변수 = 6

result = 6, 반복문 변수 = 4 → 반복문이 끝남

따라서 result의 값은 6입니다.


두번째 팩토리알 구현은 재귀함수를 사용해보겠습니다.

재귀함수란?

함수내부에서 자기자신을 호출하는 함수를 말합니다.

소스 코드를 먼저 보여드리겠습니다.

소스 코드

#재귀함수 사용
def my_factorial(n):
    if(n > 1):
        return n * my_factorial(n - 1)
    else:
        return 1

a = int(input("팩토리얼을 구할 숫자를 입력하세요 : "))
print(my_factorial(a))

 

1. def를 통해 my_factorial(n) 함수를 정의하였습니다.

여기서 정의한 my_factorial이 재귀함수 입니다.

해당 함수는 입력받은 파라미터 값이 1 보다 크면  = 입력받은수 * my_factorial(n -1) 을 리턴합니다.

글을 통해 도식적으로 표현해보겠습니다.

 

사용자의 입력이 5인 경우

my_factorial(5) 호출

5 > 1, 따라서 5 * my_factorial(4) 호출

4 > 1, 따라서 4 * my_factorial(3) 호출

3 > 1, 따라서 3 * my_factorial(2) 호출

2 > 1, 따라서 2 * my_factorial(1) 호출

1 > 1는 거짓 따라서 1을 리턴함

 

★ 여기서 부터 다시 거꾸로 간다고 생각하시면 됩니다.

 

my_factorial(1) = 1을 리턴하였습니다.

2 > 1, 따라서 2 * my_factorial(1) 호출이었는데, my_factorial(1) = 1 이기때문에 결국 2 * 1 리턴

my_factorial(2) = 2를 리턴하였습니다.

3 > 1, 따라서 3 * my_factorial(2) 호출이었는데, my_factorial(2) = 2 이기때문에 결국 3 * 2 리턴

my_factorial(3) = 6을 리턴하였습니다.

4 > 1, 따라서 4 * my_factorial(3) 호출이었는데, my_factorial(3) = 6 이기때문에 결국 4 * 6 리턴

my_factorial(4) = 24을 리턴하였습니다.

5 > 1, 따라서 5 * my_factorial(4) 호출이었는데, my_factorial(4) = 24 이기때문에 결국 5 * 24 리턴

my_factorial(5) = 5 * 24 = 120을 리턴하였습니다.

 

재귀함수를 처음보신 분은 조금 헷갈릴 수 있습니다.

천천히 손으로 써가시면서 보시길 추천드립니다.

 

실행 결과

 


 

세번째 파이썬으로 팩토리얼을 구현하는 방법은

math라이브러리에서 제공하는 factorial함수를 사용하는 것입니다.

라이브러리를 import하는 방법은 이전 포스팅에서 언급한 적이 있습니다.

파이썬(Python) import 예제

 

[Python]파이썬 import 사용 방법과 예제(설명추가)

c/c++에는 #include가 있고, c#에는 using이 있는 것처럼 파이썬에는 import 가 있습니다. import를 통해서 기존 만들어져있는 라이브러리를 사용할 수 있습니다. 기본적인 파이썬 import 방법은 다음과 같습니다..

manniz.tistory.com

팩토리얼은 이미 수학적으로 많은 분야에 쓰이기 때문에 라이브러리화되어 있는 것이고,

이것을 사용하면 우리는 바로 결과를 알 수 있습니다.

하지만 무조건 라이브러리를 사용하는 것보다는(프로그래밍을 처음 공부하는 것이라면 더욱) 직접 구현해 보는 것이

실력 향상에는 도움이 된다고 생각합니다.

 

다시 본론으로 돌아와서 math라이브러리를 사용한 소스코드 입니다.

 

소스 코드

#math라이브러리 사용
import math
a = int(input("팩토리얼을 구할 숫자를 입력하세요 : "))
print(math.factorial(a))

 

실행 결과

 

 

 

이상 파이썬에서 팩토리얼(factorial)을 구현하는 방법에 대한 포스팅이었습니다.

감사합니다 >_<

 

파이썬 팩토리얼 소스 전체 캡처

 

댓글