什么是错用下面的代码:的平方根二进制搜索陷入无限循环中的javascript
的CoffeeScript:
sqrt = (n) ->
small = 0.01
lo = 0
hi = (n+1)/2
while hi > lo
mid = (lo+hi)/2
diff = Math.pow(mid, 2) - n
sign = (diff > 0) ? 1 : 0
if Math.abs(diff) < small
return mid
else
switch sign
when 1
hi = mid
when 0
lo = mid
console.log (sqrt 33)
的Javascript:
// Generated by CoffeeScript 1.3.3
(function() {
var sqrt;
sqrt = function(n) {
var diff, hi, lo, mid, sign, small, _ref;
small = 0.01;
lo = 0;
hi = (n + 1)/2;
debugger;
while (hi > lo) {
mid = (lo + hi)/2;
diff = Math.pow(mid, 2) - n;
sign = (_ref = diff > 0) != null ? _ref : {
1: 0
};
if (Math.abs(diff) < small) {
return mid;
} else {
switch (sign) {
case 1:
hi = mid;
break;
case 0:
lo = mid;
}
}
}
};
console.log(sqrt(33));
}).call(this);
另一件事是,当你在无限循环或递归调用中,您甚至无法打开控制台。浏览器只是冻结。这太令人讨厌了。任何人都可以阐明这一点呢?
“{1:0}”的结果是什么? – sics