二进制搜索-javascript-为什么数组中的最后一项导致超过最大调用堆栈?

二进制搜索-javascript-为什么数组中的最后一项导致超过最大调用堆栈?,javascript,algorithm,Javascript,Algorithm,写这篇文章是为了尝试我的手上的一个建设一个二进制搜索。这决不是最重构的代码,但它想知道为什么除了X是数组中的最后一个值(即X=77)之外,所有的东西都能工作 函数二进制搜索(x,arr){ var len=arr.length-1//因为索引从0开始 var最小值=arr[0] var max=arr[0] var new_arr=[] if(xarr[len]) //console.log(arr[len]) console.log(x+“不在数组范围内。”) 其他的 查找_x(x,arr)

写这篇文章是为了尝试我的手上的一个建设一个二进制搜索。这决不是最重构的代码,但它想知道为什么除了X是数组中的最后一个值(即X=77)之外,所有的东西都能工作

函数二进制搜索(x,arr){
var len=arr.length-1//因为索引从0开始
var最小值=arr[0]
var max=arr[0]
var new_arr=[]
if(xarr[len])
//console.log(arr[len])
console.log(x+“不在数组范围内。”)
其他的
查找_x(x,arr)
函数find_x(x,arr){
var mid=Math.floor(arr.length/2)//处理数组中的奇数元素
如果(x==arr[mid])
console.log(“找到”+x)
如果(xarr[mid])
{
最小值=平均值[中间值]
新阵列=阵列切片(中间、透镜)
查找x(x,新阵列)
}
其他的
console.log(x+“不在数组中。”)
}
}
var arr=[1,12,43,55,66,77]
二进制搜索(77,arr)

问题可能在这里:

new_arr = arr.slice(mid, len)
您从未在
find_x
的范围内设置
len

var len = arr.length
不使用
-1
,否则将切断最后一个元素

结束提取的从零开始的索引。切片提取到但不包括
结束

使用google chrome调试器找到-你应该有一天试试

JSFiddle:

参考资料:


插入
console.log('x=',x,'arr=',arr)
作为
find_x
函数的第一行,您将被照亮。您的实现很混乱,请尽量避免使用自由变量,并以某种方式实现它,使
find
函数只使用其作用域变量。检查作为更好实现的示例
var len = arr.length