//二分探索の再帰バージョンを忘れた
関数binary_search(arr, target,low,high){
if(low var min=(low high)/2;
if(target>arr[ min])
return binary_search(arr,target,min 1,high);
else
return binary_search(arr,target,low,min); else if(low==high) { //要素が 1 つだけ残っています
if(arr[low]==target)
return low;
else return -1
}else if(low>high){ //空です。arr の初期高値を計算するときは、arr .length-1 を考慮する必要があります。
}
}
var arr=[1,2] ,3,4, 5,6];
alert(binary_search(arr,3,0,arr.length-1));
夜にデータ構造を見て、jsで二分探索アルゴリズムを書きました(コードは上記の通り)、テストデータとしてランダムに配列を書いた(上記の通り)、検索対象の添字を出力するはずですが、予想外のことが発生しました。約 2 秒後、ブラウザは実行中のスクリプトを自動的に終了し、しばらく戸惑いました。
経験上、スクリプトを実行する過程で無限ループが発生するはずですが、独習中にアルゴリズムを確認しましたが、問題はありませんでした (教科書に従ってコードを直接入力するだけで問題ありません)。あなたは間違いではありません)、しかし問題は残ります。そこで、最初の判定条件に次のように出力文を追加しました。
//二分探索忘れ再帰バージョン関数 binary_search(arr,target,low,high){
if(low var min=(low high )/2;
if(target>arr[min])
return binary_search(arr,target,min 1,high);
else
return binary_search(arr,target,low,min) ) ;
}else if(low==high){ //残りの要素は 1 つだけです
if(arr[low]==target)
else return <🎜; >}else if(low>high){ //空の場合、arr.length-1 を使用して arr
の初期高値を計算するときに考慮する必要があります。 return -1;
}
}
実行すると、ダイアログ ボックスに 2.5 という数字が表示されます~~ 突然、コンピューターを叩きたい衝動に駆られました。
エラーの原因と概要:
JavaScript の「/」演算子は C の「/」演算子とは異なります。後者は自動的に四捨五入されますが、前者は四捨五入されていない場合は小数点を取得します。整数で割ります (たとえば、5/2=2.5)。
解決策:
(1)var min=parseInt((low high)/2);
(2)var min=Match.floor((low high)/2);