|
안녕하세요 소리입니다! 저번에 해봤던 재귀함수들은 모두 반복문으로 쉽게 바꿀 수 있었습니다.
하지만 이번에는 반복문으로 바꾸기 어렵거나 순환을 써야하는 경우 입니다. 함수의 호출이 맨앞에서 이루어 지는 머리순환이나 여러군데에서 자기자신을 호출 하는 경우가 대표적 입니다.
***예제 1. 하노이탑***
규칙 1. 한번에 하나의 원판만 이동할 수 있다. 규칙 2. 맨 위에 있는 원판만 이동할 수 있다. 규칙 3. 크기가 작은 원판 위에 큰 원판이 쌓일 수 없다. 규칙 4. 중간의 막대를 임시적으로 이용할 수 있으나 앞의 조건들을 지켜야 한다. 하노이탑은 이 규칙들을 이용하여 봉A의 막대들을 전부 봉C로 옮기는 문제입니다.
결과 값은 a의 값에 따라 대칭되어 나타납니다. (a=4일경우) 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 이 숫자들은 원판이 옮겨지는 순서입니다. a=1 이 될떄 원판은 from에서 to로 옮겨지며 나머지의 경우에 from -> tmp , from->to , tmp->to 로 옮긴다. |
***예제 2. 재귀를 이용한 이진탐색***
이진탐색이란?
절반으로 나눠서 가운데부터 내가 찾고싶은 값을 탐색한다.
만약 내가 찾는 값이 가운데보다 크다면? 가운데보다 큰 쪽부터 다시 반으로 나눠서 탐색!
만약 나개 찾는 값이 가운데보다 작다면? 처음부터 가운데까지 반으로 나눠서 탐색!
이렇게 반으로 나누는 동작을 반복하는 탐색입니다.
결과값을 살펴보면
이렇게 찾는값의 위치가 반환되어 나타나는 것을 알 수 있습니다.
찾는 값이 없다면 -1이 리턴되어 표시가 되겠죠?
앞의 예시들로 순환프로그래밍 기법으로 프로그램들을 작성해보았습니다.
다음번엔 배열로 찾아뵙겠습니당ㅎㅎㅎㅎ
'IT 공부 > 자료구조' 카테고리의 다른 글
[자료구조/C언어] - ⑥ 리스트 - 단순연결리스트 역순,반전 (0) | 2017.02.15 |
---|---|
[자료구조 /C언어]-⑤ 다항식 배열,다항식의 덧셈 (2) | 2017.02.15 |
자료구조/C언어 ④ 자료구조 희소행렬 - 행렬의 곱셈,덧셈,90도회전 (0) | 2017.02.15 |
[자료구조/C언어] - ③ 리스트 - 단순연결리스트 삽입,추가/삭제/생성 (0) | 2017.02.09 |
자료구조 ① - (순환) 재귀함수 (팩토리얼 프로그램) (0) | 2017.02.06 |