※요약
C언어에서 재귀 호출을 이용한 이진 탐색이다. 이진 탐색이란 이름 그대로 탐색할 데이터를 반으로 나눠 나머지 반만 탐색하는 방식을 반복하는 알고리즘이며 빠른 속도로 원하는 값을 찾을 수 있다. 이진 검색, 이분 검색 등으로도 불린다.
※특징
- 각 요소의 값들은 정렬되어 있어야 한다.
- 각 요소의 값들은 모두 달라야 한다.
※예제
#include <stdio.h> int RecusiveBinSearch( int nArr[], int nBegin, int nEnd, int nTarget ) { int nMid = 0; if( nBegin > nEnd ) { return -1; //탈출 조건 및 탐색 실패 } nMid = (nBegin+nEnd) / 2; if( nArr[nMid] == nTarget ) { return nMid; //타겟을 찾았다. } else if( nTarget < nArr[nMid] ) { return RecusiveBinSearch( nArr, nBegin, nMid-1, nTarget ); } else { return RecusiveBinSearch( nArr, nMid+1, nEnd, nTarget ); } } int main( ) { int nArr[] = { 1, 3, 5, 7, 9, 11, 13 }; int nResult; nResult = RecusiveBinSearch( nArr, 0, sizeof(nArr)/sizeof(int)-1, 7 ); if(nResult == -1) { printf( "값이 없습니다.\n" ); } else { for( int i=0 ; i<sizeof(nArr)/sizeof(int) ; ++i ) { printf( "%d ", nArr[i] ); } printf( "\n%d번째 배열 요소에 있습니다.\n", nResult ); } return 0; }
※결과
'예제 모음 > C/C++' 카테고리의 다른 글
[C언어] 재귀 함수 - 10진수 -> 2진수 변환 (1) | 2014.03.20 |
---|---|
[C언어] 소수점 특정 자릿수 반올림하기 - ROUND 함수 (0) | 2014.03.14 |
[C언어] 어떤 수 x가 2의 n승인지 판별하는 함수 (0) | 2014.03.13 |
[C언어] 재귀 함수 - 거듭제곱 (power) (3) | 2013.12.05 |
[C언어] 재귀 함수 - 팩토리얼 (Factorial) (3) | 2013.12.05 |
[C언어] 재귀 함수 - 함수의 재귀적 호출 (3) | 2013.12.04 |
[C언어] 위경도 좌표계 거리 구하기 (0) | 2013.09.27 |