이분검색-low,high 두값을 파라미터만 받아 재귀로 구현

조회수 574회

include

int location(int low,int high);

int main(void) {

int n, num, x, i = 0;
//int arr[3];
//printf("순서대로 입력해주세요");
//for (i = 0; i < 3; i++) {
//  scanf("%d", arr[i]);
//}

printf("검색할 숫자를 입력해주세요");
scanf("%d", &x);
printf("%d\n",location(0,2));
return 0;

} int location(int low,int high) {

int mid;
if (low > high)
    return 0;
else {
    mid = (low + high) / 2;

    if (x == arr[mid])
        return mid;
    else if (x < arr[mid])
        return location(low, mid - 1);
    else
        return location(mid + 1, high);

}

}

파라미터로 low,high 두값만을 인자로받아 이분탐색을 재귀로 구현하는것인데... 파리미터로 x와arr을 받지않았는데..어떻게 구현해야할까 ? 도움 받고싶습니다.

1 답변

  • 바이너리 서치 재귀 함수 내부에서 x와 arr 값은 어짜피 고정되어 있습니다. 분할 정복하는 단계에서 x와 arr값은 불변하며 그저 참조만 하면 되기 때문에 굳이 넘겨 줄 필요가 없어요.

    그렇다면! 재귀 함수 내부에서 참조 가능하도록 외부에 미리 선언해 두는거죠.

    P.S. 근데 이런 문제는 왜 나오는 걸까요...? 극한 체험인가...

    • 재귀함수 내부에서 참조하려면 전역변수로 선언해두는 수밖에 없지않나요? 알 수 없는 사용자 2018.9.18 00:38
    • arr과 x값 모두 전역변수로요~! 알 수 없는 사용자 2018.9.18 00:38
    • 그렇죠. 제가 낸 해결책과 같은 생각입니다. 근데 그렇게 해결하면 안되나요? doodoji 2018.9.18 13:41
    • 이렇게 해결은 되었습니다..! 그런데 c언어에서 이렇게 하니 너무 낯설어서요... 알 수 없는 사용자 2018.9.18 14:03
    • 저는 문제가 더 낯설은데요? ㅋㅋ 전역이 아니라면 C++처럼 class를 구성하고 그 내부에서 this로 접근할 수 있는 member 변수를 이용해야 하는데 그건 또 C 스타일로 안되잖아요? 심지어 '함수 그대로를 사용하세요' 라는 제약이 있으면 이것도 안되는거고... 결국 params 2개만 받는 극한 상황이면 전역처리밖에는 없어 보입니다. doodoji 2018.9.18 14:18

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)