用JavaScript实现二分查找有个小Bug

铛铛铛铛Huan 2016-11-23 08:11:07

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>冒泡排序</title>
<script type="text/javascript">
var arr1 = [5,2,8,0,1,8,12,29,10,38,22];
for(var i = 0; i < arr1.length - 1; i++)
{
for(var j = 0; j < arr1.length - 1 - i; j++)
{
if(arr1[j] > arr1[j + 1])
{
var temp = arr1[j];
arr1[j] = arr1[j + 1];
arr1[j + 1] = temp;
}
}
}
/*二分查找*/
var mid;
function binarySearch(arr, num, i , j)
{
mid = Math.floor((i + j) / 2);
if(arr[mid] == num)
{
document.write("find it!" + mid + "<br />")
return mid;
}
else if(arr[mid] > num)
{
document.write(mid + ":" + arr[mid] + "<br>");
binarySearch(arr, num, i, mid);
}
else
{
document.write(mid + ":" + arr[mid] + "<br>");
binarySearch(arr, num, mid, j);
}
if(i > j)
{
return false;
}
}
var res = binarySearch(arr1, 5, 0, arr1.length);
alert(res);
</script>
</head>
<body>
</body>
</html>

为什么最后输出弹出的窗口显示undefine?
mid是一个全局变量啊,为什么不能作为函数值返回?
...全文
119 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
铛铛铛铛Huan 2016-11-24
  • 打赏
  • 举报
回复
理解了,谢谢!
bhbhxy 2016-11-23
  • 打赏
  • 举报
回复
else if(arr[mid] > num) { document.write(mid + ":" + arr[mid] + "<br>"); return binarySearch(arr, num, i, mid); } 必须在递归调用这里return,这样才能挂起,不然它还是会执行下面的代码,后面的代码(if代码块后)没有返回值所以是undefined。 完整代码2楼已经发了。
铛铛铛铛Huan 2016-11-23
  • 打赏
  • 举报
回复
其实我没太理解一楼的说法,仔细琢磨了一下,貌似是因为函数里面的是值而不是地址,所以在函数中对mid修改,而在函数外部不会改变mid的值,可以这样理解吗?
Go 旅城通票 2016-11-23
  • 打赏
  • 举报
回复
function binarySearch(arr, num, i , j) { mid = Math.floor((i + j) / 2); if(arr[mid] == num) { document.write("find it!" + mid + "<br />") return mid; } else if(arr[mid] > num) { document.write(mid + ":" + arr[mid] + "<br>"); return binarySearch(arr, num, i, mid); } else { document.write(mid + ":" + arr[mid] + "<br>"); return binarySearch(arr, num, mid, j); } if(i > j) { return false; } }
bhbhxy 2016-11-23
  • 打赏
  • 举报
回复
你的代码应该走了else 或者 else if 分支,这两个分支里面没有返回mid。

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧