递归函数多个返回值

时间:2014-04-15 21:26:45

标签: c recursion gdb binary-search

我已经写了一些代码来实现一个函数,它使用二进制搜索来检查,如果给定的值在数组内部。我使用了一个递归函数,该函数使用新输入调用自身,因此总是将一半排序的数组值截断。如果二进制搜索函数的计算结果为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;  
}

2 个答案:

答案 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;  
}