티스토리 뷰
풀이
def factorial(n):
if n == 1 or n == 0:
return 1
return n * factorial(n-1)
n = int(input())
print(factorial(n))
접근법
재귀 중에서도 가장 간단한 문제다. 전체적인 흐름을 보면 다음과 같다.
1
2 * factorial(1)
3 * factorial(2)
4 * factorial(3)
5 * factorial(4)
우선, 위처럼 값을 모두 쌓아둔다. (push) 그리고 각 값을 출력할 때, 메모리 입장에서는 factorial() 값을 모르기
때문에 pop을 해서 factorial(1) = 1 과 같이 값을 거꾸로 찾아간다. 즉,
2 * factorial(1) = 2 * 1
3 * factorial(2) = 3 * 2 * 1
4 * factorial(3) = 4 * 3 * 2 * 1
5 * factorial(4) = 5 * 4 * 3 * 2 * 1
의 순서로 값을 추적한다. 따라서, 먼저 stack을 통해서 쌓아두고, 끝난 뒤에는 거꾸로 pop을 함으로써
각 함수의 값을 대입한다.
'프로그래밍 > BOJ' 카테고리의 다른 글
백준 #2447: 별찍기 [Python] (1) | 2020.02.11 |
---|---|
백준 #10870: 피보나치 수 5 (0) | 2020.02.02 |
백준 #1002: 터렛 (0) | 2020.01.30 |
백준 #3053: 택시 기하학 (0) | 2020.01.30 |
백준 #4153: 직각삼각형 (0) | 2020.01.27 |
댓글