3 개의 인수 int value (내가 찾고있는 것), int values [] (배열), int n을 사용하여 약간 비 전통적인 방식으로 이진 검색을 구현하려고합니다. (배열의 크기). 아래의 코드는 숫자 2를 찾고 13이 없다는 것을 인식하지만 6이나 7과 같은 숫자를 찾을 수 없습니다. 문제는 최종 재귀 호출에 있다고 생각합니다. 포인터 문제 일 수 있습니다. 나머지 코드는 제대로 작동합니다. 내가 잘못 될 수있는 부분에 대한 생각은 인정 될 것이다.바이너리 검색 Seg 오류
#include <stdio.h>
#include <stdbool.h>
bool search(int value, int values[], int n);
int main(void)
{
int value = 6;
int values[] = {1, 2, 3, 4, 5, 6, 7};
int n = 7;
bool x = search(value, values, n);
if (x == true)
printf("found\n");
else
printf("not found\n");
}
bool search(int value, int values[], int n)
{
int midpoint = n/2;
if (n/2 <= 0)
{
return false;
}
if (value == values[midpoint])
{
return true;
}
if (value < values[midpoint])
{
return search(value, values, n/2);
}
else if (value > values[midpoint])
{
return search(value, values, n/2);
}
return false;
}
'values + n - n/2' ('values + n/2'와 같지 않음)와 같은 것이 필요합니다. – user3386109
값은 배열의 이름이기 때문에 필자는 필자가 따르는 것에 유의해야합니다. 양 n/2를 추가하는 것은 의미가있는 것처럼 보이지 않습니다. 나는 확실히 그것을 가지고 놀 것입니다. 답장을 보내 주셔서 감사합니다. – Ryan
'if (n/2 <= 0)'줄이 잘못되었습니다. 0은 유효한 배열 색인입니다. 이것이 배열 슬라이스 시작 부분에서 코드가 값을 찾을 수없는 이유입니다. – tofro