재귀호출 문제인거 같습니다만..
글쓴이: shs0917 / 작성시간: 목, 2004/03/11 - 3:03오후
#include <stdio.h>
#define MAX 100
#define COMPARE(x,y) (((x)<(y))?-1:((x)>(y))?1:0)
int sort(int [], int);
int binsearch(int [], int, int, int);
int main(void){
int index, left = 0, n, searchnum;
int data[MAX];
printf("Enter the n: ");
scanf("%d", &n);
if(n < 1 || n > MAX){
fprintf(stderr, "Input error\n");
exit(1);
}
for(index = 0; index < n; index++){
data[index] = rand() % 100;
printf("%d ", data[index]);
}
printf("Created data:\n");
if(sort(data, n) != 0){
fprintf(stderr, "Sort error!\n");
}
printf("Selection sorted data:\n");
for(index = 0; index < n; index++){
printf("%d ", data[index]);
}
printf("End\n");
printf("Enter the search number : ");
scanf("%d", &searchnum);
index = binsearch(data, left, n, searchnum);
if(index == -1){
fprintf(stderr, "Sorry, not found searchnumber.\n");
}
else{
printf("Search number is %d.\n", data[index]);
printf("Search number index is %d.\n", index + 1);
}
}
int sort(int sdata[], int sn){
int swap(int *, int *);
int index1, index2, min;
for(index1 = 0; index1 < sn - 1; index1++){
min = index1;
for(index2 = index1 + 1; index2 < sn; index2++){
if(sdata[min] > sdata[index2]){
min = index2;
}
}
if(swap(&sdata[min], &sdata[index1]) != 0){
fprintf(stderr, "Swap error!\n");
}
}
return 0;
}
int swap(int *x, int *y){
int temp;
temp = *x;
*x = *y;
*y = temp;
return 0;
}
int binsearch(int sdata[], int left, int right, int searchnum){
int middle;
while(left <= right){
middle = (left + right)/2;
switch(COMPARE(sdata[middle], searchnum)){
case -1: binsearch(sdata, middle + 1, right, searchnum);
case 0: return middle;
case 1: binsearch(sdata, left, middle - 1, searchnum);
}
}
return -1;
}
이진탐색 알고리즘인데요..
처음 몇번 실행하면 되는데.. 다음부터는 서치부분에서 그냥.. 뻗어서 암짓도
안합니다. 재귀호출을 쓰면.. 스택이 넘칠경우 문제가 될 수 있다는 얘기를
어디서 들은듯 한데... 조언 부탁 드립니다.
그리고.. 스택영역 검사할 수 있는 방법 없을까요?
Forums:


한가지 질문..
자세하게 보지는 않았지만..
만약 일치 하는 값이 없으면 어떻게 되나요?;;
그냥 무한 재귀 될 것 같은데..
그리고 왠만한 경우 아니면 스택 잘 안넘칩니다.. ^^;
소스 한번 다시 봐야 겠네요..
재귀호출이 아니고, binsearch() 입니다.(0,2), (1,
재귀호출이 아니고, binsearch() 입니다.
(0,2), (1,3), ... ( n, n+2 ) 의 인덱스에서 문제가 생기겠군요?
계속 같은 인덱스를 넘기면서 재귀호출 할겁니다.
한번 테스트해보세요.
삽질의 대마왕...
댓글 달기