【发布时间】:2018-02-19 23:51:26
【问题描述】:
我正在研究一个函数,该函数应该从整数列表中将最接近的较低数字返回给目标。 (即 [1,23,45,67,94,122],目标 = 96。应该返回 94)。我已经多次查看我的代码,试图“捕获导致该函数返回“未定义”的错误,但我无法找出原因......当我通过该过程打印出我的变量时,它们都匹配我想要什么,但我的返回值一直是未定义的。我在想我的问题在于前两个条件,但我仍然不知道为什么。有什么线索吗?
这是我的代码:
function binarySearch(arr,target){
var midpoint = Math.floor(arr.length/2);
if (arr[midpoint] === target){
return arr[midpoint];
}
if (arr.length === 1){
return arr[0];
}
if (arr[midpoint] > target){
binarySearch(arr.slice(0,midpoint),target);
}else if (arr[midpoint] < target){
binarySearch(arr.slice(midpoint),target);
}
}
binarySearch([1,23,45,67,94,122],96); => 预期返回值 = 94 // 得到 = 未定义。 :/
【问题讨论】:
-
因为你没有在递归中返回
-
请注意,最后的
if(在else之后)是多余的。您已经检查了equals和greater than案例。 -
作为 Disha Umarwani points out,这会计算出与最接近的值不同的值:不大于目标的最大值。例如,如果你使用上面的目标
92,你会得到67的值,如果这是你想要的,很好,但如果不是,你可以看看stackoverflow.com/a/30245398/1243641
标签: javascript undefined binary-search