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

使用Javascript ES6递归地进行二进制搜索

二进制搜索是一种在有序数组中查找特定元素的算法。它通过将数组分成两半,并比较目标值与数组中间元素的大小来确定目标值可能存在的位置。如果目标值小于中间元素,则在数组的左半部分进行递归搜索;如果目标值大于中间元素,则在数组的右半部分进行递归搜索;如果目标值等于中间元素,则找到了目标值。这个过程不断重复,直到找到目标值或确定目标值不存在。

二进制搜索的优势在于它的时间复杂度为O(log n),相比于线性搜索的O(n)更高效。它适用于有序数组,并且可以快速定位目标值。

在Javascript ES6中,可以使用递归的方式实现二进制搜索。以下是一个示例代码:

代码语言:txt
复制
function binarySearch(arr, target, start = 0, end = arr.length - 1) {
  if (start > end) {
    return -1; // 目标值不存在
  }

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

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

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const target = 6;
const result = binarySearch(arr, target);

if (result !== -1) {
  console.log(`目标值 ${target} 在数组中的索引为 ${result}`);
} else {
  console.log(`目标值 ${target} 不存在于数组中`);
}

在腾讯云的产品中,可以使用云函数 SCF(Serverless Cloud Function)来部署和运行这段Javascript代码。云函数是一种无需管理服务器即可运行代码的计算服务,可以实现按需执行、弹性扩缩容、自动管理等特性。您可以通过腾讯云云函数产品页面(https://cloud.tencent.com/product/scf)了解更多关于云函数的信息。

请注意,以上答案仅供参考,具体的技术实现和产品选择应根据实际需求和情况进行评估和决策。

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

相关·内容

JS 设计模式之原型模式(创建型)

JavaScript 里,Object.create 方法就是原型模式的天然实现——准确说,只要我们还在借助 Prototype 来实现对象的创建和原型的继承,那么我们就是在应用原型模式。...2、JavaScript 中的“类” 虽然说 ES6 支持类,但 ES6 的类其实是原型继承的语法糖,类语法不会为 JavaScript 引入新的面向对象的继承模型。...而 JavaScript 本身类型就比较模糊,不存在类型耦合的问题,所以说平时不会刻意使用原型模式。因此不必强行把原型模式当作一种设计模式去理解,把它作为一种编程范式来讨论会更合适。...实例里手动定义 eat 方法和 toString 方法,它们还是被成功调用了。...这是因为访问一个 JavaScript 实例的属性/方法时,它首先搜索这个实例本身;当发现实例没有定义对应的属性/方法时,它会转而去搜索实例的原型对象;如果原型对象中也搜索不到,它就去搜索原型对象的原型对象

58840

javascript你必须知道的面试题

javascript你必须知道的面试题 ? 1、使用 typeof bar === "object" 判断 bar 是不是一个对象有神马潜在的弊端?如何避免这种弊端?...中的 number 类型就是浮点型,JavaScript 中的浮点数采用IEEE-754 格式的规定,这是一种二进制表示法,可以精确地表示分数,比如1/2,1/8,1/1024,每个浮点数占64位。...但是,二进制浮点数表示法并不能精确的表示类似0.1这样 的简单的数字,会有舍入误差。 由于采用二进制JavaScript 也不能有限表示 1/10、1/2 等这样的分数。...如果在不改变递归模式的前提下修善这段代码?...我长大的过程中也不断听到这种话,我从来都不听,我就一直坚持我年轻时认为是正确的东西。——罗永浩

69020
  • ECMAScript 6 新特性总结

    注: 1、ES6的支持性可以查看:http://kangax.github.io/compat-table/es6/ 2、Google V8引擎已经部署了ES6的部分特性,使用Node.js 0.12...使用时需注意: 对常量重新赋值不会报错,只会默默失败。 与let命令相同,只在声明所在的块级作用域内有效。...二、变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。...对象的解构赋值,可以很方便将现有对象的方法,赋值到某个变量。对象的解构同样可以指定默认值,并且可以与函数参数的默认值一起使用。...支持第二个参数,表示对前n个字符进行搜索。 repeat():返回一个新字符串,表示将原字符串重复n次。

    1.5K60

    36个助你成为专家需要掌握的JavaScript概念

    因此,通过理解时间间隔方法,我们可以理解它们是如何工作的,并在我们的用例中有效使用它们。 11、 JavaScript引擎 我们现在正在深入研究JavaScript。...位操作符在这种二进制表示上执行操作,但是它们返回标准的JavaScript数值。 通常,你不会在代码中使用这些操作,但它们确实有一些用例。可以使用它们查找偶数和奇数值、颜色转换、颜色提取和配置标志。...23、 递归 递归是所有编程语言中的一个常见概念。简单说,递归就是把大问题分解成小问题的概念。 实际上,这通常意味着编写一个调用自身的函数。...尽管有成千上万个用例的算法,其中两个用例是相当常见的: 搜索 排序 这两个用例对程序员来说是非常常见的,你至少应该全面了解可供他们使用的已知算法。...这将帮助你和你的团队在应用程序开发期间顺利协同工作。 35、解构 在ES6中引入了解构操作符。它有相当多的用例,你肯定应该熟悉。对于相同的用例,它们比以前的实现更简单、更有效。

    71220

    「吐血整理」再来一打Webpack面试题

    因为 Webpack 只认识 JavaScript,所以 Loader 就成了翻译官,对其他类型的资源进行转译的预处理工作。...,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理 完成模块编译:在经过第4步使用 Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系...读取与合并配置参数,加载 Plugin,实例化 Compiler 编译:从 Entry 出发,针对每个 Module 串行调用对应的 Loader 去翻译文件的内容,再找到该 Module 依赖的 Module,递归进行编译处理...打包过程中检测工程中没有引用过的模块并进行标记,在资源压缩时将它们从最终的bundle中去掉(只能对ES6 Modlue生效) 开发中尽可能使用ES6 Module的模块,提高tree shaking...Loader 是否需要二进制数据 尽可能的异步化 Loader,如果计算量很小,同步也可以 Loader 是无状态的,我们不应该在 Loader 中保留状态 使用 loader-utils 和 schema-utils

    1.2K21

    ES6-标准入门·语法的扩展

    数值的扩展 二进制与八进制表示法 ES6 提供了二进制和八进制数值的新写法,分别用前缀 0b(或 0B)和 0o(或 0O)表示。...JavaScript 的整数使用 32 位二进制形式表示,Math.clz32 方法返回一个数的 32 位无符号整数形式有多少个前导 0。...ES6 第一次明确规定,所有 ECMAScript 的实现都必须部署“尾调用优化”。这就是说,在 ES6 中,只要使用递归,就不会发生栈溢出,相对节省内存。...对于其他支持“尾调用优化”的语言(比如 Lua、ES6),只需要知道循环可以用递归代替,而一旦使用递归,就最好使用递归。 严格模式 ES6 的尾调用优化只在严格模式下开启,正常模式下是无效的。...while 循环总会执行,很巧妙将“递归”改成了“循环”,而后一轮的参数会取代前一轮的参数,保证了调用栈只有一层。

    1.1K40

    12 个 GitHub 上超火的 JavaScript 奇技淫巧项目,找到写 JavaScript 的灵感!

    引擎 二进制, 十进制, 十六进制, 科学记数法 偏函数, 柯里化, Compose 和 Pipe 代码整洁之道 而且每个主题都包含了相关的精彩文章和视频,非常适合学习。...使用原生 JavaScript 在 30 天内完成 30 个项目。 每天完成的 HTML, CSS 和 javascript 解决方案。...ES6 入门教程 ? 入门的前端都应该都知道的 ES6 开源书籍,猫哥初入前端时就是学了 阮一峰 老师开源的 ES6 内容的,一直实用至今!...JavaScript 编程语言 在这儿我们将从头开始学习 JavaScript,也会学习 OOP 等相关高级概念。 本教程专注于语言本身,我们默认使用最小环境。 ?...:使用搜索的命名 在开发过程中,我们阅读代码的时间会远远超过编写代码的时间,因此保证代码的可读性与可搜索会非常重要。

    57350

    Webpack源代码泄露

    ,Webpack支持CommonJS、AMD、ES6等多种模块化规范并且提供了强大的插件机制和开发者工具,可以帮助开发者进行代码优化、压缩、混淆、实时重载等操作 主要功能 Webpack的主要功能包括:...模块化规范:支持CommonJS、AMD、ES6等多种模块化规范 模块化管理:通过模块化管理打包后的代码以提高前端应用程序的性能和加载速度 打包静态资源:将多个JavaScript、CSS、图片等静态资源文件打包成一个或多个静态资源文件...插件机制:提供了丰富的插件机制和开发者工具,可以帮助开发者进行代码优化、压缩、混淆、实时重载等操作 工作原理 Webpack从指定的入口文件开始递归解析出所有的依赖模块并通过加载器对模块进行处理,使用插件进行各种代码优化和资源压缩等操作...会解析入口文件及其依赖的模块,通过构建模块之间的依赖关系形成一个依赖图谱 加载器类:Webpack支持使用加载器对模块进行预处理,例如:将ES6转换为ES5、将Sass转换为CSS等 插件处理:Webpack..."Ctrl+Shift+i"查看并获取目标网站的源代码信息,在本例中可以看到webpack字样,说明使用webpack Step 2:选中"webpack"文件夹并单击搜索,输入"js.map"即可获取代码中包含的

    1.4K30

    每天10个前端小知识 【Day 1】

    ES6也是如此,第一次明确规定,所有 ECMAScript 的实现,都必须部署"尾调用优化”。这就是说,在 ES6 中,只要使用递归,就不会发生栈溢出,相对节省内存。 2. 堆与栈有什么区别?...当主函数调用另外一个函数的时候,要对当前函数执行断点进行保存,需要使用栈来实现,首先入栈的是主函数下一条语句的地址,即扩展指针寄存器的内容(EIP),然后是当前栈帧的底部地址,即扩展基址指针寄存器内容(...Javascript 做好铺垫。...说说 Javascript 为什么会存在数字精度丢失的问题,以及如何进行解决?...,会造成二进制的舍入操作(0舍1入),当再转换为十进制时就造成了计算误差 解决方法 使用 toPrecision 凑整并 parseFloat 转成数字后再显示: function strip(num,

    10610

    「吐血整理」再来一打Webpack面试题

    因为 Webpack 只认识 JavaScript,所以 Loader 就成了翻译官,对其他类型的资源进行转译的预处理工作。...,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理 完成模块编译:在经过第4步使用 Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系...读取与合并配置参数,加载 Plugin,实例化 Compiler 编译:从 Entry 出发,针对每个 Module 串行调用对应的 Loader 去翻译文件的内容,再找到该 Module 依赖的 Module,递归进行编译处理...打包过程中检测工程中没有引用过的模块并进行标记,在资源压缩时将它们从最终的bundle中去掉(只能对ES6 Modlue生效) 开发中尽可能使用ES6 Module的模块,提高tree shaking...Loader 是否需要二进制数据 尽可能的异步化 Loader,如果计算量很小,同步也可以 Loader 是无状态的,我们不应该在 Loader 中保留状态 使用 loader-utils 和 schema-utils

    62820

    力扣 (LeetCode)-栈,括号生成 |刷题打卡

    ES6的限定作用域Symbol实现类 ES6新增了一种叫做Symbol的基本类型,它是不可变的,可以用作对象的属性。...所以不该使用这种方法。 ES6中的WeakMap实现类 使用WeakMap确保属性是私有的,WeakMap可以存储键值对,其中键是对象,值可以是任意数据类型。...,扩展类无法继承私有属性 十进制转二进制问题算法 示例: function divideBy2(decNumber){ var remStack = new Stack(), rem, binaryString...一个合格的初级前端工程师需要掌握的模块笔记 Vue.js笔试题解决业务中常见问题 【初级】个人分享Vue前端开发教程笔记 长篇总结之JavaScript,巩固前端基础 前端面试必备ES6全方位总结 达达前端个人...web分享92道JavaScript面试题附加回答 【图文并茂,点赞收藏哦!】

    32720

    前端工程师自检清单73答

    如何处理循环的异步操作 将异步操作变同步,使用 async/await. 去掉循环,将循环变成递归 执行机制 1....因此,即使finally 中对返回的结果进行了改变,但是不会影响返回结果。 它应该使用栈保存返回值。 2....熟练运用 es5、es6 提供的语法规范 【JavaScript 标准参考教程(alpha)】 【ECMAScript 6 入门】 3. setInterval 需要注意的点,使用 settimeout...因此在每一次使用setInterval方法时,都需要进行一次判断。...从规范的角度理解 HTML,从分类和语义的角度使用标签 语义化标签: 等 让页面呈现清晰的结构 屏幕阅读器(如果访客有视障)会完全根据你的标记来“读”你的网页 搜索引擎的爬虫依赖标签确定上下文和权重问题

    1.9K21

    要深入 JavaScript,你需要掌握这 36 个概念

    了解作用域有助于我们有效使用JavaScript。 我们还需要了解全局作用域以及块和函数作用域,也称为词法作用域。...因此,通过理解时间间隔方法,我们可以理解它们是如何工作的,并在我们的用例中有效使用它们。 11.JS 引擎 JavaScript引擎是执行 JS 代码的计算机程序或解释器。...按位运算符对此类二进制表示形式执行其操作,但是它们返回标准JavaScript数值。 通常,很少会在代码中使用这些操作,但是它们确实有一些用例。...23.递归 递归是所有编程语言中的一个常见概念。简单说,递归就是把大问题分解成小问题,然后解决小问题一种思路。...尽管递归可能是一个让你头疼的令人困惑的概念,但是通过大量的练习,从一些小问题开始,你可以更好地理解它。 24.集合与生成器 ES6 中新引入了集合和生成器。

    47110

    ECMAScript 6 新特性总结

    使用时需注意: 对常量重新赋值不会报错,只会默默失败。 与let命令相同,只在声明所在的块级作用域内有效。...---- 二、变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。...对象的解构赋值,可以很方便将现有对象的方法,赋值到某个变量。对象的解构同样可以指定默认值,并且可以与函数参数的默认值一起使用。...支持第二个参数,表示对前n个字符进行搜索。 repeat():返回一个新字符串,表示将原字符串重复n次。...如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。 大括号内部可以进行运算,以及引用对象属性,其中还能调用函数。

    83510

    JS_基础知识点精讲

    ES6中 instanceof 操作符会使用 Symbol.hasInstance 函数来确定关系。...---- undefined vs null 在JS中,存在两个「空值」 undefined null 从使用上对其进行分类 undefined: 是「语言层面」上使用的非值(定义一个变量,但未赋值,此时该变量会被...❞ 当我们查找一个变量的值时, 首先在当前环境中搜索它的名称,如果当前环境没有; 然后在外部环境中搜索,外部环境也没有; 然后在外部环境的外部环境中搜索,一直搜到全局作用域, 如果全局作用域也没有该变量...JavaScript引擎依据一条规则:有一个monitoring process会持续不断检查调用栈是否为空,一旦为空,它会检查Event Queue里边是否有等待被调用的函数。...使用递归,即「一个函数中所有递归形式的调用都出现在函数的末尾」,对于尾递归来说,由于只存在一个调用记录,所以永远不会发生"栈溢出"错误。

    1.1K10

    JavaScript技术入门

    JavaScript 是脚本语言。浏览器会在读取代码时,逐行执行脚本代码。而对于传统编程来说,会在执行前对所有代码进行编译。在 JavaScript 中,用分号来结束语句是可选的。...可以在文本字符串中使用反斜杠对代码行进行换行。单行注释以 // 开头。多行注释以 /* 开始,以 */ 结尾。无值的变量。未使用值来声明的变量,其值实际上是 undefined。...===是绝对等于(值和类型均相等)把十进制转换为二进制function dec2bin(dec){ return (dec >>> 0).toString(2); }把二进制转换为十进制function...i 是一个修饰符 (搜索不区分大小写)。在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。...Babel是一个广泛使用ES6转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。大家可以选择自己习惯的工具来使用使用Babel,具体过程可直接在Babel官网查看。

    1.2K51

    typeof和instanceof原理

    BigInt(大整数)是 ES2020 引入的一种新的数据类型,用来解决 JavaScript中数字只能到 53 个二进制位(JavaScript 所有数字都保存成 64 位浮点数,大于这个范围的整数,...了解更多可以看 《ES6 入门教程》 typeof null 为什么返回 'object',稍后会从JavaScript数据底层存储机制来解释。...typeof 原理 typeof原理:不同的对象在底层都表示为二进制,在Javascript二进制前(低)三位存储其类型信息。...000: 对象 010: 浮点数 100:字符串 110:布尔 1:整数 typeof null 为"object", 原因是因为 不同的对象在底层都表示为二进制,在Javascript二进制前(低)...__proto__是可设置属性,之前的代码中使用ES6的Object.setPrototypeOf(...)进行设置。然而,通常来说你不需要修改已有对象的[[prototype]]。 原型链 ?

    2.5K41

    深入探讨JavaScript函数

    函数的声明函数可以通过function关键字进行声明,后接函数名、参数列表和函数体。函数名是标识函数的唯一名称,参数列表包含函数接受的参数,函数体包含实际的执行代码。...默认参数ES6引入了默认参数,允许您为函数参数指定默认值。如果调用函数时未提供某个参数的值,将使用默认值。...ES6模块系统ES6引入了模块系统,使JavaScript可以轻松管理和导入/导出模块。模块系统提供了一种更好的方式来组织和重用代码。1..../math.js';console.log(add(3, 4)); // 输出 7console.log(subtract(5, 2)); // 输出 3使用模块系统,您可以更轻松将代码拆分为多个文件...深入理解和熟练使用函数是成为一名优秀的JavaScript开发者的关键。希望本文中的内容能够帮助您更好地理解和利用JavaScript中的函数。

    31452
    领券