所以基本上我尝试构造一个递归函数来实现对排序数组的二进制搜索,虽然我很清楚它背后流动的基本逻辑,当我只需要将三个参数传递给函数时问题就出现了是数组,它的大小和要搜索的项目。我知道如果项目位于数组的后半部分,我必须在数组的上半部分调用该函数,反之亦然,但我该怎么做?我在里面制作两个新阵列,我该如何做到这一点?我真的很困惑
答案 0 :(得分:0)
如果你在C / C ++中这样做,关键是要意识到数组是作为指针传递的。因此,每次递归调用函数时,都可以通过使用指针算法和明智选择的大小来指定数组的哪个部分。
答案 1 :(得分:-1)
你甚至可以用2个参数来做。这是我的伪代码:
find(array, item){
//base case to return the item if found
if(array.length == 1 && array[0].equals(item)) {
return array[0];
}
else {
return null;
}
//decide in which half to continue the search
if(array[array.length/2] >= item) {
return find(createSubArray(array, 0, array.length/2 -1);
}
else {
return find(createSubArray(array, array.length/2, array.length-1);
}
//never reached
return null;
}
这不受空数组或传递给方法的空值的保护。