每次生成递归javascript时都使用相同的数组

每次生成递归javascript时都使用相同的数组,javascript,Javascript,如何在每次进行递归调用时使用相同的数组 我不习惯拼接数组,我需要在同一个数组中工作,只需更改数组的index和endIndex function BinarySearch(values, searchedValue) { var middleIndex = Math.floor(values.length / 2); var middleValue = values[middleIndex]; if (middleValue === searchedValue) ret

如何在每次进行递归调用时使用相同的数组

我不习惯拼接数组,我需要在同一个数组中工作,只需更改数组的index和endIndex

function BinarySearch(values, searchedValue) {
    var middleIndex = Math.floor(values.length / 2);
    var middleValue = values[middleIndex];

    if (middleValue === searchedValue) return true;
    else if (middleValue < searchedValue && values.length > 1) {
        return BinarySearch(values[0,middleIndex], searchedValue);
    }
    else if (middleValue > searchedValue && values.length > 1) {
        return BinarySearch(values.splice(0, middleIndex), searchedValue);
    }
    else return false;
}
函数二进制搜索(值,searchedValue){
var middleIndex=数学地板(值为1.5/2);
var middleValue=价值[中间指数];
if(middleValue===searchedValue)返回true;
else if(middleValue1){
返回BinarySearch(值[0,middleIndex],searchedValue);
}
else if(middleValue>searchedValue&&values.length>1){
返回BinarySearch(value.splice(0,middleIndex),searchedValue);
}
否则返回false;
}

由于递归算法必须进行,我将数组的修改转换为两个索引的更新(
start
end
):

  • 在函数的签名中
  • 在计算
    middleIndex
  • 在递归的终止条件下
  • 在递归的“进程”中(选择数组的前半部分或后半部分)
函数二进制搜索(值、开始、结束、搜索值){
var middleIndex=数学层((开始+结束)/2);
var middleValue=价值[中间指数];
if(middleValue===searchedValue)返回true;
else if(middleValue1){
返回BinarySearch(值、开始、中间索引、searchedValue);
}else if(middleValue>searchedValue&&values.length>1){
返回BinarySearch(值、中间索引、结束、searchedValue);
}否则返回false;
}
让输入=[1,2,5,12,25];
log(二进制搜索(input,0,input.length-1,5));

log(二进制搜索(input,0,input.length-1,8))您可以轻松实现,而无需更改算法,也无需更改数组。当递归时,您只需要跟踪您所处的位置,只需将此信息传递给内部局部递归函数,即递归

function BinarySearch(values, searchedValue) {
  function doSearch(left,right) {
    var middle = Math.floor((left + right) / 2);
    var middleValue = values[middle];
    if (middleValue === searchedValue) 
      return middle;
    if ((right-left) <= 1)
      return -1;
    else if (middleValue > searchedValue) 
      return doSearch(left,middle);
    else if (middleValue < searchedValue)
      return doSearch(middle,right);
    else 
      return -1;
  }
  return doSearch(0,values.length);
}
函数二进制搜索(值,searchedValue){
功能数据搜索(左、右){
var middle=数学楼层((左+右)/2);
var middleValue=值[中间];
if(middleValue==searchedValue)
返回中间;
如果((右-左)searchedValue)
返回doSearch(左、中);
else if(中间值<搜索值)
返回doSearch(中间,右侧);
其他的
返回-1;
}
返回doSearch(0,value.length);
}

如果你没有拼接你的数组,试着想一想:递归算法还有其他方法可以继续吗?