강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

jfmam님의 프로필 이미지
jfmam

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

42. 이분검색

질문있습니다.

작성

·

194

0

int binarySearch(int key,int lt,int rt,vector <int> v) {

int mid = (lt + rt) / 2;

if (v[mid] == key) {

cout<< mid + 1;

                return mid+1;

}

else if (key <v[mid]) {

binarySearch(key, lt, mid - 1, v);

}

else {

binarySearch(key, mid + 1, rt, v);

}

}

int main() {

ios_base::sync_with_stdio(false);

//ifstream cin;

//cin.open("input.txt");

//if (cin.is_open()) {

int n,key;

cin >> n>>key;

vector<int> v(n);

for (int i = 0; i < n;i++) {

cin >> v[i];

}

sort(v.begin(), v.end());

이부분 => int value=binarySearch(key, 0, n - 1, v);

//}

}

저는 재귀함수로 짜봤는데 화살표로ㅗ 표시한 부분에 value값은 0이 출력됩니다 위에 binarySearch라는 함수부분에서 리턴시키기전에  mid+1로 찍으면 3이 잘나오는데 value값은 0이나오는 이유를 모르겠습니다

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

마직막  if (v[mid] == key) 에서 리턴하는 값은 if가 참이되기 바로 전 호출된 함수에만 값을 리턴합니다. 메인에서 호출한 binarySearch(key, 0, n - 1, v); 함수까지 전달되지 않습니다.

범위를 좁히는 함수호출부분을 return binarySearch(key, lt, mid - 1, v); 와 같이 바꾸시면 최초 메인에서 호출한 곳까지 값이 전달됩니다. 

다음 부터 질문을 하실때는 전체 소스코드를 {;} 버튼을 사용해서 올려주시기 바랍니다.  

jfmam님의 프로필 이미지
jfmam

작성한 질문수

질문하기