반응형
순환 알고리즘 (recursive algorithm)
- 직접순환(direct recursion), 간접순환(indirect recursion)
- 간결하고 명확 but, 일반적으로 수행속도 및 기억장소 사용에 비효율적이다.
- 순환(recursion) vs 반복(iteration)
순환 알고리즘의 적용 예
- Factorial : n! = n * (n-1)! = n*(n-1)*...*2*1
- Fibonacci 수열 : 1, 1, 2, 3, 5, 8, 13, 21, ....
- BNF(Backus Naur Form)
- 합계 계산(SUM)
- 정렬, 탐색, 트리 문제 등 다양한 경우에 실제 적용된다.
순환 알고리즘의 복잡도
- 순환 알고리즘의 일반적인 단계
- 분할, 정복, 결합 단계
- 순환 방정식(recurrence equation) 이용
- 예) 하노이 타워, T(n) = 2*T(n-1) + 1
- 예) Merge_Sort, T(n) = 2*T(n/2) + O(n) – 예제 분석
- 주요 해법
- 대입법 - 까다로움
- 반복법 - 많이 사용
- 일반법
Hannoi Tower 하노이 타워 문제
10개의 원반을 A에서 C로 모두 옮기기
조건
1. 원반은 한번에 한 개씩 옮길 수 있다.
2. 큰 원반이 작은 원반 위에 올라가서는 안된다.
#include <iostream>
using namespace std;
void hanoi(int n, char A, char B, char C)
{
if (n == 1)
{
cout << "Move "<< A << " to " << C << endl;
}
else
{
hanoi(n - 1, A, C, B);
cout <<"Move "<< A << " to " << C << endl;
hanoi(n - 1, B, A, C);
}
}
int main(void)
{
int n = 10; //원반 수
char A = 'A', B = 'B', C = 'C';
hanoi(n, A, B, C);
}
반응형
'공부 > 자료구조 | 알고리즘' 카테고리의 다른 글
[알고리즘] 버블 정렬 bubble sort / flag (0) | 2019.09.21 |
---|---|
[알고리즘] 정렬 / 정렬 프로그램 완성 (0) | 2019.09.15 |
자료구조와 알고리즘의 관계 (0) | 2019.09.14 |
[자료구조] 원형 큐 Circular Queue (0) | 2019.09.14 |
[자료구조] 큐 Queue / 연결리스트를 이용한 큐의 구현 (0) | 2019.09.13 |