javascript - 从二分搜索函数中返回值
问题描述
以下代码对数组进行二进制搜索。我做了最困难的部分,让代码在理论上可以工作;不幸的是,我无法从函数中返回值;
简而言之,我希望返回“len”;如果您在该行设置断点,您将看到 'len' 包含正确答案。但我错过了一些非常愚蠢的东西。请帮我识别。
var states = ['Alabama','Alaska','American Samoa','Arizona','Arkansas','California','Colorado','Connecticut','Delaware','District of Columbia','Federated States of Micronesia','Florida','Georgia','Guam','Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Marshall Islands','Maryland','Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York','North Carolina','North Dakota','Northern Mariana Islands','Ohio','Oklahoma','Oregon','Palau','Pennsylvania','Puerto Rico','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Vermont','Virgin Island','Virginia','Washington','West Virginia','Wisconsin','Wyoming'];
function binarySearch(arr1,term){
var arr = [...arr1],
len = 0;
function helper(arr,term) {
if(arr.length > 1) {
if(arr[Math.floor(arr.length/2)] === term) {
len += Math.floor(arr.length/2);
return len;
}
if(arr[Math.floor(arr.length/2)] < term) {
len += Math.floor(arr.length/2);
arr.splice(0,Math.floor(arr.length/2));
helper(arr,term)
}
else if (arr[Math.floor(arr.length/2)] > term) {
arr.splice(Math.floor(arr.length/2),arr.length-1);
helper(arr,term)
}
} else {
return 'Element not found';
}
}
return helper(arr,term);
}
console.log(binarySearch(states,"Arizona"));
解决方案
您的递归调用也应该返回给调用者:
代替:
helper(arr,term)
和:
return helper(arr,term)
在这两种情况下。
推荐阅读
- python - 有没有办法在滚动窗口中找到倒数第二个有效索引?
- blockchain - 如何在不超时的情况下从 WAX 区块链获取实时交易数据
- linux - QEMU 托管启用 MTE 的内核上的堆栈溢出不会引发错误
- java - com.okta.commons.http.HttpException:无法执行 HTTP 请求 - 可重试异常:连接重置
- python - 我想对从小字符开始的给定列表进行排序?
- php - 检测字符串是否包含未闭合的 html 标签 [php]
- javascript - 如何在没有共同范围的情况下使用 $lt 和 $gte?
- python - AttributeError:“Word2Vec”对象没有属性“wmdistance”
- scikit-learn - 使用射线调整 sklearn 中的超参数
- apache-kafka - 可以让 kafka 生产者将主题发送到云服务器而不是 localhost:9092