範囲の与え方
あとまぁ、どうでもいいといえばどうでもいいのだけど。
範囲指定する場合、終端は終端要素のインデックス + 1 で与えるのが通例じゃないのかなぁ。というか、終端要素のインデックスをそのまま与えるとあちらこちらで +1、-1 しないといけない気がする。
例えば、件のプログラムの範囲の与え方を変えれば、
function binary_search(array, value, head, tail){ if (head >= tail) return -1; var where = Math.floor((head + tail) / 2); if (value == array[where]) return where; if (value < array[where]) tail = where; else head = where; // 探し直し return binary_search(array, value, head, tail); }
で、いいし、使う側も
binary_search(array, value, 0, array.length - 1);
より、
binary_search(array, value, 0, array.length);
と余計な演算が減る。ある位置から 100 要素を対象という場合も、
binary_search(array, value, 0, i, i + 100);
となるし。