[백준] B5. 팩토리얼 2 (Python)
❓ 문제
27433번: 팩토리얼 2
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
www.acmicpc.net
💡 해결하기
ex) 3! = 3 x 2 x 1
ex) 5! = 5 x 4 x 3 x 2 x 1
즉, n!은 n x (n -1) x (n - 2) x ... x 1처럼 n부터 1씩 빼가면서 1이 될 때까지 숫자를 계속 곱해나가야 한다.
따라서 숫자가 1이 될 때까지 숫자에서 1씩 빼면서 곱해나가는 과정을 재귀나 반복문을 통해 구현할 수 있다.
* 0! 은 1이다.
➡️ 0 팩토리얼의 결과가 1인 이유는 다음과 같다.
우선, 5! 을 살펴보면 5! = 5 x (5 - 1)! = 5 x 4!이 성립한다. 즉, n! 은 (n - 1)! 의 계산 과정을 반드시 포함하게 된다. 이에 따라 1! = 1 x (1 - 1)! = 1 x 0! 이 성립하게 되고, 1! 의 결과는 이미 알려져 있다싶이 정의에 따라 1이기 때문에 0!은 1이 되어야 한다.
0!=1인 이유 (0팩토리얼이 1인 이유) (tistory.com)
0!=1인 이유 (0팩토리얼이 1인 이유)
팩토리얼은 보통 시작하는 수에 그 보다 낮은 수를 차례로 곱해서 원하는 값을 얻는데, 예를 들어 4!의 값은 4x3x2x1이 됩니다.그럼 영(0, zero)의 팩토리얼, 0! 의 값은 뭘까요? 같이 한 번 찾아봅시다
johnleeedu.tistory.com
💻 Python으로 코드 작성하기
1️⃣ 반복문(for 문)으로 작성하기
# 숫자 입력받기
n = int(input())
# 정답으로 제출할 수 (여기다 수 곱해서 누적)
answer = 1
# n이 0보다 클 경우에 n을 하나씩 줄여가면서 곱하기 반복
while n > 0:
answer *= n # ansewr에 현재 수 곱하기
n -= 1 # n을 하나씩 줄이기
print(answer) # 반복문이 끝나면 정답 출력
2️⃣ 재귀를 이용해 작성하기
# 숫자 입력받기
n = int(input())
# 팩토리얼 계산 수행 함수
# 인자로는 곱셈을 누적하여 후에 답으로 반환할 answer, 입력받은 숫자인 n이 들어감.
def factorial(answer, n):
if n == 0: # n을 감소시키다가 0이 되면
print(answer) # 현재 answer값을 출력
else: # n이 0이 아닐 경우
factorial(answer * n, n - 1) # answer에 현재 n값을 곱하고, n에서 1 감소시킨 값을 인자로 넣어 factorial 함수 재귀 호출
factorial(1, n)
숫자 입력으로 3을 입력하여 2번 코드를 실행시켰다고 가정해 보자.
실행 과정은 다음과 같이 된다.
answer의 초깃값으로 1을 넣어주는 것에 대해서는 n이 0일 경우에 출력되어야 할 결과값이 1이라는 것을 생각하면 된다.