728x90
재귀 용법
- 함수 안에서 동일한 함수를 호출하는 형태
- 여러 알고리즘 작성시 사용됨
- 스택의 전형적인 예(함수는 내부적으로 스택처럼 관리됨)
재귀 용법의 이해
- 팩토리얼을 구하는 알고리즘을 Recursive Call을 활용해서 작성해보자
- 생각해보기
2! = 1 X 2
3! = 1 X 2 X 3
4! = 1 X 2 X 3 X 4
=>규칙 : n! = n X (n-1)!
1. 함수 만들기
2. 함수(n)은 n > 1 이면 return n X 함수(n - 1)
3. 함수(n)은 n = 1이면 return n
=>검증(코드로 구현전에 간단한 경우부터 먼저 검증한다)
1. 2! 경우
함수(2)이면, 2 > 1 성립함으로 2 X 함수(1)
함수(1)은 1 이므로 return 2 X 1 = 2 맞음
2. 3! 경우
함수(3)이면, 3 > 1 성립합으로 3 X 함수(2)
함수(2)는 2!, return 2 X 1 = 2
3 X 함수(2) = 3 X 2 = 3 X 2 X 1 = 6 맞음
3. 4! 경우
함수(4)이면, 4 > 1 성립합으로 4 X 함수(3)
함수(3)은 3!, return 3 X 2 X 1 = 6
4 X 함수(3) = 4 X 6 = 24 맞음
예제
def factorial(num):
if num > 1:
return num * factorial(num - 1)
else:
return num
for num in range(10):
print(factorial(num))
"""출력결과
0
1
2
6
24
120
720
5040
40320
362880
"""
시간복잡도와 공간복잡도
- factorial(n)은 n - 1번의 factorial()함수를 호출, 곱셈을 함
- 일종의 n - 1번 반복문을 호출한 것과 같음
- factorial()함수를 호출할 때마다, 지역변수 n이 생성됨
- 시간 복잡도/공간 복잡도 O(n - 1)이기 때문에 결과는 둘 다 O(n)
#연습문제 재귀함수 활용해서 1부터 n까지 곱이 출력되도록 하라
def mul(n):
if n <= 1:
return n
return n*mul(n - 1)
mul(10)
#출력결과 3628800
'IT개발 > 알고리즘, 우리 친해지자!' 카테고리의 다른 글
알고리즘 : 퀵 정렬(Quick sort) (0) | 2021.08.30 |
---|---|
알고리즘 : 동적계획법(Dynamic Programming)과 분할정복(Divide and Conquer) (0) | 2021.08.28 |
알고리즘 : 선택정렬(selection sort) (0) | 2021.08.24 |
알고리즘 : 삽입 정렬(insertion sort) (0) | 2021.08.23 |
알고리즘 : 버블 정렬(Bubble sort) (0) | 2021.08.19 |