【问题标题】:Binary Search Using Recursive Function in C在 C 中使用递归函数进行二分搜索
【发布时间】:2014-11-27 20:00:28
【问题描述】:

所以我正在尝试编写一个使用递归的二进制搜索函数,如果我超过数组中的两个值,则会不断出现分段错误。我已经查看了一堆其他代码,它们正在做我想做的事情,据我所知,它们似乎在做同样的事情。我是一个非常新手的程序员,感觉就像我的头撞到了墙上。任何帮助将不胜感激。

int search(int value, int array[], int start, int end)
{
//Define new variables for use in recursion
int sizeArray, middleOfArray;
//Get size of array
sizeArray = (end - start) + 1;

//Find midpoint of array based off size
middleOfArray = sizeArray / 2;

//Base Case 1, if array unscannable, return -1
if (start > end) {
    return -1;
}

//Recursive Cases
else
{
    //If midpoint in array is > target value,
    //Search from beginning of array->one below midpoint
    if (array[middleOfArray] > value){
        return search(value, array, start, middleOfArray - 1);
    }
    //If midpoint in array is < target value,
    //search from one above midpoint->end of array
    else if (array[middleOfArray] < value) {
        return search(value, array, middleOfArray + 1, end);
    }
    //If none of the other cases are satisfied, value=midpoint
    //Return midpoint
    else {
        return middleOfArray;
    }
}
}

【问题讨论】:

    标签: c search recursion binary


    【解决方案1】:

    问题出在这里:

    middleOfArray = sizeArray / 2;
    

    应该是这样的:

    middleOfArray = start + sizeArray / 2;
    

    【讨论】:

    • 非常感谢这使代码工作,但我不确定我是否完全理解为什么。你介意详细说明一下吗?再次感谢
    • 不客气!那是因为你在递归中使用 middleOfArray 的值作为开始,它会改变一些递归中的开始值,并且在一些回调之后你的开始不会是 0。
    • 哇,我现在看到了。我在想数组被重新创建,但是数组大小是相同的,所以你必须加回 middleOfArray 才能进入正确的数组位置。是的,这很粗糙。再次感谢,我想我现在明白了。
    【解决方案2】:

    你也可以像这样得到数组的中间。这将使您免于一个额外的变量 sizeofArray。

    middleofArray=(start+end)/2;
    

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 2018-07-08
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      相关资源
      最近更新 更多