我们应该实现一个使用二进制搜索来检查数组key
是否在数组中并给出true或false的函数。
我这样:
bool binary_search(const int* begin, const int * end, int key){
if(begin < end){
int mid = (end-begin)/2;
if(mid == key){
return true;
}else if (key < mid){
int h = mid-1;
end = &h;
binary_search(begin, end, key);
}else if (mid < key){
int i = mid+1;
begin = &i;
binary_search(begin, end, key);
}
}else{
return false;
}
}
但它不会提供任何输出,但它会给我错误。
warning: control reaches end of non-void function [-Wreturn-type]
我真的不明白我在这里要做什么,所以有人可以解释我这里出了什么问题吗?
答案 0 :(得分:1)
如果是这些if else语句
module.exports = function composedCall(args, cb){
var pending = 0;
var results = [];
var calledBack = false;
callback1(args,handleResult());
callback2(args,handleResult());
callback3(args,handleResult());
function handleResult(){
var order = pending;
pending ++;
return function(err, result){
pending --;
if(err){
callback(err);
}else{
results[order] = result;
if(!pending){
callback(null, results);
}
}
}
}
function callback(err, value){
if(! calledBack){
calledBack = true;
cb(err, value)
}
}
}
function callback1(args ,callback){
setTimeout(callback, randomTimeout(), null, 1);
}
function callback2(args ,callback){
setTimeout(callback, randomTimeout(), null, 2);
}
function callback3(args ,callback){
setTimeout(callback, randomTimeout(), null, 3);
}
//utils
function randomTimeout(){
return Math.floor(Math.random() * 1e3);
}
function randomValue(){
return Math.floor(Math.random() * 1e10);
}
该函数不返回任何内容。这就是这些代码块没有return语句。
此外,该功能没有意义,因为例如在这些陈述中
}else if (key < mid){
int h = mid-1;
end = &h;
binary_search(begin, end, key);
}else if (mid < key){
int i = mid+1;
begin = &i;
binary_search(begin, end, key);
}
将键与数组的索引进行比较,而不是将键与索引为mid的数组中的元素值进行比较。
或者这些陈述
int mid = (end-begin)/2;
if(mid == key){
也没有意义,因为变量end将存储局部变量h的地址。
该功能可以按照以下方式实施,如本演示程序所示。
int h = mid-1;
end = &h;
它的输出是
#include <iostream>
#include <iomanip>
bool binary_search( const int *begin, const int *end, int key )
{
if ( begin < end )
{
const int *mid = begin + ( end - begin ) / 2;
if ( *mid < key ) return binary_search( ++mid, end, key );
else if ( key < *mid ) return binary_search( begin, mid, key );
else return true;
}
else
{
return false;
}
}
int main()
{
int a[] = { 1, 3, 5 };
const size_t N = sizeof( a ) / sizeof( *a );
for ( size_t i = 0; i <= a[N-1] + 1; i++ )
{
std::cout << i << " is present in the array - "
<< std::boolalpha << binary_search( a, a + N, i )
<< std::endl;
}
return 0;
}
答案 1 :(得分:0)
您应该在所有可能的分支中return
。
更改
binary_search(begin, end, key);
到
return binary_search(begin, end, key);
返回递归调用的结果。