关于javascript的一个小问题,请问有人看出啥问题吗?
最近学习javascript,有一个问题挺奇怪的,先贴出代码:
function binarySearch(){
var arr = [0,1,2,3];
var res = actbinarySearch(0,3,2,arr);
document.write("<br/>return is "+ res);
}
function actbinarySearch(left,right,val,arr){
if(left > right){
document.write("do not find");
return -1;
}
var midIndex = Math.floor((left+right)/2);
var midVal = arr[midIndex];
if(val < midVal){
actbinarySearch(left, midIndex-1,val,arr);
}else if(val > midVal){
actbinarySearch(midIndex+1, right, val, arr);
}else{
document.write("find it "+midIndex);
return midIndex;
}
}
简单的二分法,但是结果很奇怪,结果如下:

不知道为什么不一致,很费解,向各位请教一下。
——————————————————————————————————分割线——————————————————————————————
感谢@ 平淡,但不平凡的热心帮助,问题出在递归的返回值上。正确代码如下:
function binarySearch(){
var arr = [0,1,2,3];
var res = actbinarySearch(0,3,0,arr);
document.write("<br/>return is "+ res);
}
function actbinarySearch(left,right,val,arr){
if(left > right){
document.write("do not find");
return -1;
}
var midIndex = Math.floor((left+right)/2);
var midVal = arr[midIndex];
if(val < midVal){
return actbinarySearch(left, midIndex-1,val,arr); //加return
}else if(val > midVal){
return actbinarySearch(midIndex+1, right, val, arr); //加return
}else{
document.write("find it "+midIndex);
return midIndex;
}
}
如果进入前两个分支,却没有return,则函数返回默认的undefined。
这也解释了,为什么查找0,2,3时得不到正确的返回值,而查找1时可以。因为查找1时,正好是中间值,所以没有进入前两个分支。
感谢~
关于javascript的一个小问题,请问有人看出啥问题吗?的更多相关文章
- 关于 JavaScript 中一个小细节问题 (在控制台中直接 {Name:'王尼玛',Age:20} 对象报错问题)
在 Chrome 浏览器,大家可能遇到这样一个小问题. 随便输入一个 Object 对象 ,比如 {Name:'王尼玛',Age:20} ,将会报错.之前,也从来没去考虑过到底是为啥原因. 今天,刚 ...
- javascript中关于value的一个小知识点(value既是属性也是变量)
今天在学习input的value值时,发现这么一个小知识点,以前理解不太透彻 [1]以下这种情况是常见情况,会弹出“测试内容” <input type="button" va ...
- 【开源一个小工具】一键将网页内容推送到Kindle
最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...
- 怎么用JavaScript写一个区块链?
几乎所有语言都可以编写区块链开发程序.那么如何用JavaScript写一个区块链?以下我将要用JavaScript来创建1个简单的区块链来演示它们的内部到底是怎样工作的.我将会称作SavjeeCoin ...
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...
- 先定一个小目标,自己封装个ajax
你是否发现项目中有很多页面只用到了框架不到十分之一的内容,还引了压缩后还有70多kb的jquery库 你是否发现项目中就用了两三个underscore提供的方法,其他大部分的你方法你甚至从来没有看过 ...
- JavaScript写一个拼图游戏
拼图游戏的代码400行, 有点多了, 在线DEMO的地址是:打开: 因为使用canvas,所以某些浏览器是不支持的: you know: 为什么要用canvas(⊙o⊙)? 因为图片是一整张jpg或 ...
- ( 译、持续更新 ) JavaScript 上分小技巧(四)
后续如有内容,本篇将会照常更新并排满15个知识点,以下是其他几篇译文的地址: 第一篇地址:( 译.持续更新 ) JavaScript 上分小技巧(一) 第二篇地址:( 译.持续更新 ) JavaScr ...
- ( 译、持续更新 ) JavaScript 上分小技巧(三)
最近家里杂事较多,自学时间实在少的可怜,所以都在空闲时间看看老外写的内容,学习之外顺便翻译分享~等学习的时间充足些再写写自己的一些学习内容和知识点分析(最近有在接触的:复习(C#,SQL).(学习)T ...
随机推荐
- 【洛谷P1373】小a和uim之大逃离
小a和uim之大逃离 题目链接 因为每次只能向下或向右走,我们可以递推 dp[i][j][d][0/1]表示走到(i,j),mod k 意义下差值为d,轮到小a/小uim操作时的方案数 dp[i][j ...
- Jmeter-常用函数之__CSVRead使用
可参照:http://www.cnblogs.com/liu-ke/p/4324157.html 压测中有些参数是固定范围内的取值,或者成对出现(如登录帐号和密码),以大量用户同时登录网站为例: 1. ...
- Java编码问题原因以及解决
一.文件编码 Unicode 是首选编码.Unicode 是全球范围的字符编码标准. 小结: GBK 与unicode之间的转换是通过gbk unicode映射表. UTF-8 与unicode之间的 ...
- idea操作 clone项目、 import项目所有注解全部报错
操作:从现有的git上边clone项目,前提是开发工具,开发环境都一样错误类型:所有的注解全部报错 原因: 是选择了Create from existing source 一路Next下去,Maven ...
- python 使用gRPC
Python gRPC 简介 grpc 是google 开源的一款rpc服务框架,可以轻松的实现跨语言的微服务,将项目中的各个模块独立出来,单独部署,独立升级,也可以根据模块的情况进行不同语言的变成. ...
- Oracle恢复误删数据
1.先查出被删除的时间点: select * from flashback_transaction_query where table_name='表名'; 2.根据时间点恢复数据: insert i ...
- 极光推送能获取 registrationId,但是接收不到通知 - iOS
集成极光推送进行调试的时候,运行 App 可以正常获取 registrationId,但是却迟迟无法收到推送消息,而Android 端是可以正常收到消息; 检查了证书配置和极光的配置一切正常,便开始返 ...
- 上白泽慧音(tarjan,图的染色)
题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间 ...
- hibernate的报错信息a different object with the same identifier value was already associated with the session解决办法
废话不多说,直接说原因,这是在hibernate中,有2个相同类型的实体类具有同样的主键标识符,然后调用update或者调用saveOrUpdate,我朋友出这个错的由于他想要update一条数据时, ...
- Hive操作之向分区表中导入数据的语义错误
1.建完分区表之后,向表中导入数据 命令为: load data local inpath '/home/admin/Desktop/2015082818' into table db_web_dat ...