首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

二进制搜索,递归方法,返回错误的输出- js

二进制搜索(Binary Search)是一种在有序数组或列表中查找特定元素的算法。它通过将目标值与数组的中间元素进行比较,从而将搜索范围缩小一半,直到找到目标值或确定目标值不存在为止。递归方法是一种通过调用自身来解决问题的方法。

在二进制搜索中,递归方法可以用来实现该算法。递归方法的基本思想是将问题分解为更小的子问题,并通过递归调用来解决这些子问题。对于二进制搜索,递归方法可以按照以下步骤进行实现:

  1. 确定搜索范围的起始位置和结束位置。
  2. 计算中间位置(起始位置加上结束位置的一半)。
  3. 检查中间位置的元素是否等于目标值。
    • 如果等于目标值,则返回中间位置。
    • 如果大于目标值,则将结束位置更新为中间位置减一,并递归调用二进制搜索方法。
    • 如果小于目标值,则将起始位置更新为中间位置加一,并递归调用二进制搜索方法。
  • 重复步骤2和步骤3,直到找到目标值或确定目标值不存在。

如果递归方法在搜索过程中找到目标值,则返回目标值的索引;如果搜索过程中确定目标值不存在,则返回错误的输出。

在JavaScript中,可以使用以下代码实现递归的二进制搜索算法:

代码语言:txt
复制
function binarySearchRecursive(arr, target, start, end) {
  if (start > end) {
    return -1; // 返回错误的输出,表示目标值不存在
  }

  const mid = Math.floor((start + end) / 2);

  if (arr[mid] === target) {
    return mid; // 找到目标值,返回索引
  } else if (arr[mid] > target) {
    return binarySearchRecursive(arr, target, start, mid - 1); // 目标值在左侧,递归搜索左半部分
  } else {
    return binarySearchRecursive(arr, target, mid + 1, end); // 目标值在右侧,递归搜索右半部分
  }
}

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const target = 6;
const result = binarySearchRecursive(arr, target, 0, arr.length - 1);
console.log(result); // 输出:5

这段代码实现了在有序数组 arr 中搜索目标值 target 的递归二进制搜索算法。如果找到目标值,则返回其索引;如果目标值不存在,则返回 -1。

推荐的腾讯云相关产品和产品介绍链接地址:

以上是腾讯云提供的一些与云计算相关的产品,可以根据具体需求选择适合的产品来支持开发工作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

解决Spring Boot请求接口返回400错误排查方法

在开发过程中,遇到接口返回400错误是比较常见情况。这种错误通常表示请求参数有问题,但有时候却没有提供具体错误信息,给排查带来了一定困扰。...本篇文章将介绍一种解决方法,通过实际案例展示如何排查并解决Spring Boot请求接口返回400错误。概述 在实际案例中,编写了一个新增接口/sync用于同步商品档案信息。...在最初代码实现中,请求参数使用了自定义实体对象StyleBillsRequest作为方法参数,并使用@RequestBody注解来接收请求JSON数据。...然而,当调用该接口时,始终返回400错误,没有提供任何具体错误信息。初步排查 根据同事指点,怀疑请求参数JSON结构与实体对象字段结构不匹配,导致无法正确转换。...,我们成功解决了Spring Boot请求接口返回400错误问题。

3.7K10
  • 关于js数组循环输出几个方法以及关于下标不固定循环输出控制方法

    今天上班遇到个下标不固定jsjson对象,如图 ?...本人想实现是忽略第一个元素,循环后面的数据, 一开始使用是for循环  var i; for(i=1;i<data.length;i++){ } 没写完就发现这样不行,因为本身下标是2,data...); 这样也发现i还是下标的值,输出结果还是3个都输出,不能实现忽略第一个; 到后来大神跟我说了个for in  <script type="text/javascript"...=1){     //遍历输出   }   i++; } 这样子的话,当第一次执行时,i为1,这样就不会输出,而第一次过后,i会+1,i=2,这样的话就开始输出了,脑子真笨!...转载无需和我联系,但请注明来自仙士可博客www.php20.cn 上一篇: php递归函数返回返回不出问题

    5.7K30

    GTFOcli:一款基于二进制搜索命令错误配置系统评估工具

    GTFOcli是一款功能强大命令行接口工具,该工具提供了简化二进制搜索命令,可以帮助广大安全研究人员检测包含错误配置目标系统,并执行绕过测试以对其进行安全评估。...Unix二进制 搜索tar二进制代码: gtfocli search tar 从stdin搜索tar二进制代码: echo "tar" | gtfocli search 搜索指定位置文件二进制代码...Winget二进制代码,并将结果输出为yaml格式(使用-h参数可查看可用格式选项): gtfocli search Winget -o yaml --os windows 使用Docker化解决方案执行搜索...搜索Winget二进制代码,并将结果输出为yaml格式: docker run -i cmdtoolsowner/gtfocli search Winget -o yaml --os windows...搜索tar二进制代码并将结果输出为json格式: echo 'tar' | docker run -i cmdtoolsowner/gtfocli search -o json 搜索以卷形式加载在容器指定位置文件中二进制代码

    7710

    用javascript分类刷leetcode之递归&分治(图文视频讲解)

    递归三要素递归函数以及参数递归终止条件递归单层搜索逻辑递归伪代码模版:function recursion(level, param1, param2, ...) { //递归终止条件 if (level...,使用分治,一分为二,等于x*xn/2次方 }方法2:二进制图片思路:对n二进制不断右移动,判断n二进制最后一位是否是1, 如果是1则将结果乘以x。...方法1.递归图片思路:从根节点递归,每次递归分为走左边、右边、不动 3种情况,用当前节点加上左右子树最大路径和不断更新最大路径和复杂度:时间复杂度O(n),n为树节点个数。...4.分治图片思路:不断从数组中间进行递归分割,直到每个区间个数是1,然后向上合并左右区间个数较多数,向上返回。...二叉搜索范围和 (easy)给定二叉搜索根结点 root,返回值位于范围 low, high 之间所有结点和。

    38160

    前端js上传文件到COS对象存储后获取返回对象链接方法

    项目开发过程中往往会遇到前端js上传文件到COS对象存储没有返回对象链接情况,今天跟大家分享一个CORS配置小技巧 由于COS上传密钥放在前端不安全,我们使用腾讯云生产临时密钥配置在前端,通过前端...js sdk上传文件到COS对象存储,在不做任何配置情况下,COS返回信息只有Status Code和headers信息 image.png 如果我们想直接获取到上传成功文件链接,需要在COS控制台...--找到相应存储桶--基础配置--跨域访问CORS设置中, 添加如下规则: 来源Origin 操作Methods Expose-Headers 超时Max-Age * PUT...GET POST DELETE HEAD Etag Content-Length x-cos-request-id 5 image.png 保存后重新通过JS SDK上传,此时就会返回上传成功后文件链接啦

    13.2K11

    关于抓包返回数据正常,浏览器请求报403错误解决方法

    不知道大家遇到过没有,我们使用诸如Fiddler、Charles进行抓包时候是正常,但是当我们将请求Url链接拷贝到浏览器中进行请求时候,就会403错误。...403错误是我们网络请求中常见【禁止访问】错误。如下所示,我们在Charles中是正常,但是在浏览器中或者使用Postman进行访问时就会出现403错误。...对于这种403禁止访问错误,我们一般只需要加上对应header参数即可。具体需要哪些参数,可以将完整请求拷贝过来,然后进行头信息分析。...通常需要参数如下: req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML...req.add_header("Host","blog.xxx.net") req.add_header("Referer","http://www.xxx.net/") 比如,前面的示例,我将需要header

    2.4K20

    正则表达式:.Net Framework平衡组递归匹配搜索源码中函数方法({}匹配)

    再比如,java代码中一个函数/方法都是由嵌套{}构成,如何准确从源码文件中找出一个方法也需要对{}递归匹配或叫嵌套匹配。...目前并不是所有的正则表达式引擎都具备了递归匹配功能,根据网上一些资料得到信息是目前只有Perl,PHP,GRETA,还有.Net Framework提供了此项功能。...对Perl等还不了解,本文关注是.Net Framework正则表达引擎来实现符号递归匹配。 在.Net Framework中这个特性是由《平衡组定义》来实现。...如下一个简单例子(来自于Microsoft《分组构造》),用于()递归匹配 (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?...掌握了这个方法后,我们可以进一步匹配代码中所有的有@Override注释泛型方法 表达式更复杂一些: @Override[\n\r\t ]*[^{}]*]*(((?'

    1.4K20

    如何用 ajax 连接mysql数据库,并且获取从中返回数据。ajax获取从mysql返回数据。responseXML分别输出不同数据方法

    我这篇标题之所以用了三句,是为了方便其他人好查找;       这里介绍方法有什么用呢? 使用它,就可以无闪刷新页面,并且从数据库获取实时改变数据反馈回界面,显示出来!...82 //还有一种返回式以字符串形式返回,responseText,这个可以用下标法逐个输出,但是注意,逐个输出是字符, 83 //也就是说,你想要一个字符串会被拆成几份...84 85 //这里 getElementsByTagName("time")[0].childNodes[0].nodeValue; 是采用遍历数方法逐个输出数据...""; 12 //这里 标签就是刚才(" "),里面要填,通过这方式,分别输出、获取不同值,下同 13 echo "" ....> 由于我自己是通过输出系统时间来测试,测试成功后是,看到时间

    7.7K81

    如何实现一个惊艳面试官递归版本 js 对象深拷贝方法

    ,网上有很多相关文章和实现都非常完美,本文主要讲述是用一种非常规使用非递归方法实现深拷贝 本文深拷贝只考虑数组、对象、简单值三种数据类型 要实现判断数据类型,先来实现这 3 个判断类型工具方法...其实几乎所有的函数递归,都可以使用非递归方法实现。...js 调用栈过深出错情形,这个时候切回成非递归写法就可以,而且很简单 我们简单先了解下 j s 递归本质。...用非递归解法本质就是使用队列或者栈数据结构来模拟 js 调用栈执行过程 伪代码如下,百分之 99 递归都可以用如下思想实现非递归 声明一个stack变量模拟调用栈 const stack...例如我们上面递归实现深拷贝 dest[index] = _cp(item); 其实很好理解,递归时候,当我们下一级递归返回时候,我们还能赋值说明在递归场景下,下一级返回后,我们当前级执行变量还都在我们直接执行就可以

    1.4K21

    搞定大厂算法面试之leetcode精讲10.递归&分治

    23.并查集 24.其他类型题 递归三要素 递归函数以及参数 递归终止条件 递归单层搜索逻辑 递归伪代码模版: function recursion(level, param1, param2, .....空间复杂度:O(logn), n为递归深度 js: var myPow = function (x, n) { if (n === 0) return 1 // n=0直接返回1 if...ret * ret : ret * ret * x; } } 方法2:二进制 ds_50 思路:对n二进制不断右移动,判断n二进制最后一位是否是1, 如果是1则将结果乘以x。...4.分治 ds_51 思路:不断从数组中间进行递归分割,直到每个区间个数是1,然后向上合并左右区间个数较多数,向上返回。...二叉搜索范围和 (easy) 方法1:dfs 复杂度:时间复杂度O(n),空间复杂度O(n) js: var rangeSumBST = function(root, low, high) {

    41440

    小白学Flask第六天| abort函数、自定义错误方法、视图函数返回

    本文内容: 1. abort函数使用 2. 自定义错误处理方法 3. 设置响应信息方法 4....返回json数据方法 abort函数使用 abort函数是我们又新接触一个函数,具体有什么作用?简单点说它可以终止视图函数执行并且还可以返回给前端特定信息。...自定义错误处理方法 我们上面通过abort返回状态码404,所返回页面都是固定404页面,有时我们需要去自己定义返回页面信息,我们该如何去做?...''' # 这个返回值会是用户在前端中所看到结果 return u"很抱歉,出现了404错误 错误信息: %s" % err if __name__ == '__main__':...json数据方法 在Flask中,我们如何返回json数据呢?

    2.6K20

    LinuxShell命令grep

    输出匹配字符串部分(每部分输出占一行) -q, --quiet, --silent 安静模式,不向标准输出写任何信息如何找到任何匹配字符串就立即以状态 0 退出,即使检测到错误(参见 -s, --no-messages...选项) -s, --no-messages 禁止输出任何有关文件不存在或不可读错误信息 3.4 行输出前缀控制 选项参数 说明 -b, --byte-offset 在输出每行前面同时打印出当前行在输入文件中字节偏移量当同时指定...GLOB 文件如果是递归读取目录下文件,则处理基本名(不包含路径)匹配模式所有文件 -r, --recursive 递归处理目录下所有文件,同 -d recurse 选项对于符号链接,仅在命令行上才按照符号链接所指定文件...退出状态 正常情况下,有任一行匹配返回退出状态 0,没有任何行匹配返回退出状态 1,有错误出现返回退出状态 2 。...当指定 -q, --quiet, --silent 选项时,有错误出现也返回退出状态 0 。

    74610

    「面试基础小册」数据类型及其延伸

    还有一个是:Number 转换值不同,Number(null) 输出为 0, Number(undefined) 输出为 NaN null 不是对象,为何 typeof null 结果为 object...虽然 typeof null 会输出 object,但是这只是 JS 存在一个悠久 Bug。...在 JS 最初版本中使用是 32 位系统,为了性能考虑使用低位存储变量类型信息,000 开头代表是对象然而 null 表示为全零,所以将它错误判断为 object 。...递归方法可以解决 JSON.parse(string) 存在问题 function deepClone(data) { if (!...---- 在 JS 中类型转换只有三种情况,分别是: 转换为布尔值(调用 Boolean()方法) 转换为数字(调用 Number()、parseInt()和 parseFloat()方法) 转换为字符串

    66520
    领券