バイナリ検索を再帰的にだけでなく、ノートの再帰的なバージョンを書きます

バイナリ検索を実装するための再帰的な方法。

順序付けられた配列リストにおいて、標的配列かどうかを確認するために、インデックス1から始まります。リターン・インデックス、そうでない場合は0の言葉で。

思考
   1.リニアは通常、ソート昇順、テーブルをソートします。
  2.中間値を目標値と比較されます。
  2.1比較の中間値及び目標値を、等しい場合、添字は、出口に戻されます。
  2.2中央値は最小値との中間値を探し、2を実行し続け、その後、目標値よりも大きいです。
  2.3目標値よりも小さい中間値は、その後、検索を続行し、最大値との中間値は、2を実行します。
 

初版(エラー)

int型 recursive_bin_ser(INT *リスト、int型の長さ、int型のターゲット){
     int型分= 1、最大=長さ- 1。、MID =(MAX + 1分)/ 2 ;
     IF(リスト[MID] ==ターゲット)を返すMIDを、
     他の IF(リスト[MID] <ターゲット)戻り   recursive_bin_ser(MID + +リスト1。、MAX- MID、ターゲット);
      戻り recursive_bin_ser(リスト、ミッド;分間、ターゲット)
} 
。// 1目標を処理せずには存在しません。
// 2.さらに悪いことに、その都度、関数呼び出し、MIN、MAX、中旬には再初期化されます、実際にはない場合、最小値、最大値は、半ば分は前回の実行、最大、半ばの関数であってもよいです。
//各呼び出し機能、ローカル変数の最小値、最大値、中央に割り当てられている機能。渡されたパラメータの形で対処、。


再版

INT recursive_bin_ser(INT *リスト、INT分、INT MAX、int型のターゲット){
     int型ミッド=(MIN + MAX)/ 2 一方(MIN <= MAX){
     場合(リスト[中間] ==ターゲット)戻りミッド。
    それ以外の 場合(リスト[中期] <ターゲット)の戻り   recursive_bin_ser(リスト、ミッド+ 1 、最大、ターゲット)。
    他の リターン recursive_bin_ser(リスト、分、ミッド- 1 、ターゲット)。
    } 
    戻り 0 
}
// 1.我々は、再帰関数を実行するとき、それは最大と最小に達している機能は、オブジェクトの機能にアクセスすることができ、フォームの関数パラメータとしてmaxにもminであろう。私は将来は再帰関数でできるだけだと思う
簡単に混乱させる//宣言変数、新入生のメモリのオーバーヘッド、および各機能間で同じ名前の2番目の変数。
//2.while(min <= max)の場合、ループ終了、それが最後の分= MAX、MIN + 1は、次のステップまたはMAXであるため-1ターゲットが、リストにないことを示しています。
INT のmain(){
     int型のリスト[ 5 ] = {
         01234 
    }。
    std ::ソート(リスト、リスト + 5); // 排序 
    のprintf(" %D \ n "、recursive_bin_ser(リスト、14100));

 12.30、そしてそれは、壊れた睡眠ことが、また、ツールの人々の日として!

おすすめ

転載: www.cnblogs.com/jielearscoding/p/12556348.html