728x90
재귀 알고리즘(Recursive)
어떤 알고리즘일까?
재귀 알고리즘은 하나의 함수에서 자기 자신을 다시 호출하여 작업을 수행하는 알고리즘을 말한다.
위에 사진은 재귀 함수의 작동 방식을 간단한 예제를 활용하여 나타낸 것이다. 사진을 보면 알 수 있듯이 원하는 값을 얻을 때까지 자기 자신을 다시 호출하는 것을 알 수 있다.
장점과 단점
- 장점
재귀 알고리즘은 문제를 작은 단위의 하위 문제로 분활하고, 해당 하위 문제의 해결에도 동일한 알고리즘을 반복적으로 사용함으로 코드가 간결하고 유연성이 높다는 장점이 있다. - 단점
재귀 알고리즘은 원하는 값이 나올 때까지 자기 자신을 계속 호출하는 것이기 때문에, 너무 많이 호출할 경우 코드의 속도 저하나 메모리 과다 사용 문제가 발생할 수 있다.
언제 사용하는가?
- 재귀적 구조를 가진 문제
이진 트리의 순회나 피보나치 수열 등 재귀적인 구조를 가진 문제를 해결할 때 사용한다. - 작업을 작은 단위로 나누어야 할때
문제를 더 작고 관리하기 쉬운 작은 단위의 하위 문제로 분활해야 할때 재귀 함수를 사용한다. 이렇게 하면 복잡한 문제를 해결하기 쉬운 단위로 쪼개어 해결할 수 있다.
알고리즘 사용 예제
1부터 10까지 자연수의 합 구하기
- 문제 설명
1부터 10까지 자연수의 합을 구하기 위해서는 재귀 함수를 사용하지 않아도 되지만 예시를 위해서 재귀함수를 이용해 구해보도록 하자.
먼저 sum이라는 변수에서 합을 구한다고 지정하고, 1부터 함수를 시작한다. 1을 sum변수에 더한 후 1에 1을 더해서 2를 매개변수로 함수를 다시 호출한다. 그럼 sum변수에 2를 더하고 2에 1을 더해서 3을 매개변수로 함수를 다시 호출한다. 이런식으로 코드를 짜면 10까지의 합을 구할 수 있을 것이다.
한가지 주의할 점은 11이 매개 변수로 들어왔을 때, 더 이상 함수를 호출하지 않고 return을 해주는 코드를 만들어줘야 한다. 이렇게 함수를 더이상 호출하지 않고 return 해주는 지점을 “base condition” 이라고 한다. - 알고리즘 사용
함수 안에서 다시 자기 자신을 호출하는 부분이 재귀함수 알고리즘이 사용된 부분이다. - CODE
1
2
3
4
5
6
7
8
9
10
11
|
def add(num):
global sum
if num == 11:
return
else:
sum += num
add(num + 1)
sum = 0
add(1)
print(sum)
|
cs |
728x90
'[알고리즘] > [알고리즘 공부]' 카테고리의 다른 글
[알고리즘 공부] #5 큐 알고리즘(Queue) 알고리즘 with Python (0) | 2024.06.28 |
---|---|
[알고리즘 공부] #4 비트마스크(BitMask) 알고리즘 with Python (0) | 2024.06.26 |
[알고리즘 공부] #2 백트래킹(BackTracking) 알고리즘 with Python (2) | 2024.06.02 |
[알고리즘 공부] #1 완전 탐색, 브루트포스(Brute Force) 알고리즘 with Python (2) | 2024.05.20 |