バイナリ検索を使用して値がkey
であるかどうかをチェックし、trueまたはfalseを指定する関数を実装する必要があります。constポインタを使用したバイナリ検索
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]
私は本当に私がここでやることが、誰かが間違ってここに何が起こっているかを私に説明することができます持っているものを理解していませんか?
'binary_search(開始、終了、キー)である'の呼び出しは、おそらく '彼らの前にreturn'を持っている必要があります。 – ildjarn
@songyuanyao 'end =&h;'はバグです。これは '* end = h;'と '* begin = i;' – Rotem
でなければなりません。ロジックが一致するようにインデントされたとき、値チェックコードが見つからず、そのパスに 'return'がないのでコンパイラが不平を言っているかもしれません。与えられた3つの条件は 'if(key == mid)'と 'else if(key mid)'であり、これらは全てのケースをカバーしますが、 3番目のテストが冗長であることを確認します。 –