백준 BaekJoon Online Judge // 10872

2021. 1. 23. 18:15Programming/BOJ

백준 알고리즘 BaekJoon Online Judge 10872번 "팩토리얼" 문제입니다.

def fac(N):
  if N <= 1:
    return 1
  else:
    return N * fac(N-1)

F = int(input())
print(fac(F))

팩토리얼 함수를 재귀함수로 짜는 문제다.

대학교의 코딩 기초 과목에서 항상 나오는 문제라고 생각한다.

그만큼 재귀함수는 꽤 유명하고 쓰이는 곳도 종종 있지만 성능과 난해할 수 있는 가독성 때문에 그렇게 좋은 방법이라고 생각하지는 않는다.

재귀함수는 탈출구가 항상 있어야 한다.

탈출 조건문이 없을 경우 함수는 끝나지 않고 함수 스택이 계속 쌓여서 스택 오버플로우가 날 수 있다.

따라서 N이 1이하 일때 return 1을 해줘서 탈출구를 마련해준후 나머지의 경우는 N*fac(N-1)을 리턴해줘서

N! = N*(N-1)*(N-2)*...*3*2*1의 과정을 수행할 수 있도록 해준다.