이분검색-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
댓글 입력