我已经写了一些代码来实现一个函数,它使用二进制搜索来检查,如果给定的值在数组内部。我使用了一个递归函数,该函数使用新输入调用自身,因此总是将一半排序的数组值截断。如果二进制搜索函数的计算结果为true,则先前执行的函数将计算为false。有人知道如何处理这个问题吗?
这是我在代码中使用的功能:
bool binarySearch(int key, int array[], int min, int max)
{
int midPoint = findMidPoint(min, max);
if (max < min)
return false;
if (array[midPoint] < key)
{
binarySearch(key, array, midPoint + 1, max);
}
else if (array[midPoint] > key)
{
binarySearch(key, array, min, midPoint - 1);
}
else if (array[midPoint] == key)
{
return true;
}
return false;
}
答案 0 :(得分:3)
这是arunmoezhi所说的,你需要返回你的调用(递归函数),如果不是你的结果将会消除,下一阶段就会返回false,这就是为什么你总是会弄错。
bool binarySearch(int key, int array[], int min, int max)
{
int midPoint = findMidPoint(min, max);
if (max < min)
return false;
if (array[midPoint] < key)
{
return binarySearch(key, array, midPoint + 1, max);
}
else if (array[midPoint] > key)
{
return binarySearch(key, array, min, midPoint - 1);
}
else if (array[midPoint] == key)
{
return true;
}
return false;
}
答案 1 :(得分:1)
您需要在递归调用中添加return
。
bool binarySearch(int key, int array[], int min, int max)
{
int midPoint = findMidPoint(min, max);
if (max < min)
return false;
if (array[midPoint] < key)
{
return binarySearch(key, array, midPoint + 1, max); // Return from the call
}
else if (array[midPoint] > key)
{
return binarySearch(key, array, min, midPoint - 1); // Return from the call
}
else if (array[midPoint] == key)
{
return true;
}
return false;
}