정수를 받아 그 정수의 팩토리얼을 계산하는 재귀함수
def factorial_num(n):
if n == 1:
return 1
else:
return n * factorial_num(n-1)
print(factorial_num(100)) # 코드 확인
def factorial_num(n):
# 팩토리얼 함수 설정
if n == 1:
# n 이 1이라면
아, 만약 조건을 안 걸어준다면... (나도 알고 싶지 않았음)
계산할 수 있는 재귀함수의 깊이를 초과했다는 글을 볼 수 있다...
우리는 정수를 받아 그 정수의 팩토리얼을 받아야 하기 때문에 조건을 걸어줘야 한다!
if n == 1: # n이 1이라면
return 1
# 1 리턴하기
else: # 아니라면
return n * factorial_num(n-1) # n * f(n-1)
# n * f(n-1) 리턴하기
나처럼 처음 보고 뭔 소리야? 할 수도 있으니까 좀 더 자세히 설명해보면
return n * factorial_num(n-1)
# n-1 * factorial(n-1-1) .... 이런 식으로 점점 작아짐 (이 과정이 반복됨)
# n이 5라면 5*4*3*2*1 ... 이렇게 진행되기 때문
즉 내가 설정한 factroial_num(n) 함수가 실행이 되면
(이때 n에 5가 입력되었다고 생각해보자)
def factorial_num(5):
[1] 5 * factroial_num(5-1) 실행
[2] 4 * factroial_num(4-1) 실행
[3] 3 * factroial_num(3-1) 실행
[4] 2 * factroial_num(2-1) 실행
[5] 1 * 1 실행
이렇게 단계별로 설명할 수 있다!
1은 어떡하지?
그래서 아까 if 조건을 걸어줌!!
n이 1이 아닐 때 else 로 넘어갈 테니까....
난 n에 100을 넣어서 실행시켜봤는데
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
가 나왔다...
잘 굴러감!