javascript中"/"运算符常见错误


Posted in Javascript onOctober 13, 2010

//二分查找健忘递归版本

function binary_search(arr,target,low,high){ 
if(low<high){ //至少包括两个元素 




var min=(low+high)/2; 
if(target>arr[min]) 
return binary_search(arr,target,min+1,high); 
else 
return binary_search(arr,target,low,min); 
}else if(low==high){ //只剩下一个元素 
if(arr[low]==target) 
return low; 
else return -1; 
}else if(low>high){ //空,当用arr.length-1来计算arr的初始high时才要考虑 
return -1; 
} 
}

var arr=[1,2,3,4,5,6];
alert(binary_search(arr,3,0,arr.length-1));
晚上看数据结构,顺便就用js写了个二分查找算法(代码如上),然后随便写了个数组作为测试数据(如上),按照设想应该是输出查找目标的下标,但是意向不到的事情发生了,只见CPU霎时狂转,约两秒后,浏览器自动终止了脚本的运行,然后就一阵纳闷。

根据经验来看,应该是在脚本运行的过程出现了死循环,自习看了一下算法,没有发现什么问题(干脆直接照着课本上的代码输入总不会错了吧),但是问题依旧。于是就在第一个判断条件里面加了个输出语句,如下:

//二分查找健忘递归版本function binary_search(arr,target,low,high){ 
if(low<high){ //至少包括两个元素



 

var min=(low+high)/2; 



 if(target>arr[min]) 
return binary_search(arr,target,min+1,high); 

else 


return binary_search(arr,target,low,min); 
}else if(low==high){ //只剩下一个元素 

if(arr[low]==target) 


return low; 

 else return -1; 
}else if(low>high){ //空,当用arr.length-1来计算arr的初始high时才要考虑 

return -1; 
} 
}

运行,弹出个对话框,里面数字为2.5~~突然有种恍然大悟同时想要砸电脑的冲动。

出错原因以及总结:

javascript里面的"/"运算符跟C++里面的"/"运算符不一样,后者自动取整,前者若非整除则会得到小数(比如说5/2=2.5)。
解决方案:

(1)var min=parseInt((low+high)/2);
(2)var min=Match.floor((low+high)/2);

Javascript 相关文章推荐
js获取url中指定参数值的示例代码
Dec 14 Javascript
node.js中的http.createServer方法使用说明
Dec 14 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
Sep 08 Javascript
jQuery Validate初步体验(一)
Dec 12 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
May 25 Javascript
Ionic学习日记实现验证码倒计时
Feb 08 Javascript
基于angular6.0实现的一个组件懒加载功能示例
Apr 12 Javascript
Vue2.0 实现移动端图片上传功能
May 30 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
Feb 25 Javascript
JS随机密码生成算法
Sep 23 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
Feb 08 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
Oct 13 #Javascript
理解Javascript_05_原型继承原理
Oct 13 #Javascript
JavaScript 打地鼠游戏代码说明
Oct 12 #Javascript
理解Javascript_03_javascript全局观
Oct 11 #Javascript
理解Javascript_02_理解undefined和null
Oct 11 #Javascript
理解Javascript_01_理解内存分配原理分析
Oct 11 #Javascript
javascript getElementsByClassName实现代码
Oct 11 #Javascript
You might like
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
基于python实现学生管理系统
2018/10/17 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
使用python实现画AR模型时序图
2019/11/20 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
党支部承诺书范文
2014/03/28 职场文书
法制宣传口号
2014/06/16 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
行政助理岗位职责
2015/02/10 职场文书
英语导游词
2015/02/13 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
Python中的程序流程控制语句
2022/02/24 Python