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 相关文章推荐
基于jquery的图片的切换(以数字的形式)
Feb 14 Javascript
将光标定位于输入框最右侧实现代码
Dec 04 Javascript
JAVASCRIPT函数作用域和提前声明 分享
Aug 22 Javascript
js中reverse函数的用法详解
Dec 26 Javascript
jquery图片切换实例分析
Apr 15 Javascript
JQuery自动触发事件的方法
Jun 13 Javascript
Javascript 5种方法实现过滤删除前后所有空格
Jun 22 Javascript
js图片上传前预览功能(兼容所有浏览器)
Aug 24 Javascript
浅谈AngularJs指令之scope属性详解
Oct 24 Javascript
Node接收电子邮件的实例代码
Jul 21 Javascript
layui框架table 数据表格的方法级渲染详解
Aug 19 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
Apr 17 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读取30天之内的根据算法排序的代码
2008/04/06 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
python计数排序和基数排序算法实例
2014/04/25 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
python读文件的步骤
2019/10/08 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
工业自动化专业毕业生推荐信
2013/11/18 职场文书
结婚典礼证婚词
2014/01/11 职场文书
成龙洗发水广告词
2014/03/14 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
少年犯观后感
2015/06/11 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
暑假生活随笔
2015/08/15 职场文书