範囲の与え方

あとまぁ、どうでもいいといえばどうでもいいのだけど。
範囲指定する場合、終端は終端要素のインデックス + 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);

となるし。