我一直在寻找用 JavaScript 编写的巴比伦平方根算法,并找到了这个可行的解决方案:
function sqrt(num) {
var accuracy = 0.000001;
function isPrecise(estimation) {
if (Math.abs( Math.pow(estimation, 2) - num ) < accuracy) {
return true
} else {
return false
}
}
function improvePrecision(estimation) {
return (estimation + (num / estimation)) / 2;
}
function iteration(estimation) {
if(isPrecise(estimation)) {
return estimation;
} else {
return iteration(improvePrecision(estimation));
}
}
return iteration(num);
}
但我看不到初始猜测值(在代码中 - estimation
)的定义位置。那么,当第一次迭代没有猜测值时,它是如何工作的呢?实际上,这个值应该等于 num
参数。
最佳答案
估计
是在迭代函数内部定义的。
函数第一次运行时,调用迭代函数,参数为num
,return iteration(num)
。
在 iteration
函数中,算法首先检查估计是否正确。
如果不是,再次调用iteration
,但这一次,它首先改进给定的estimation
return iteration(improvePrecision(estimation));
所以 iteration
是递归函数,除非估计足够精确,否则它将调用自身:(isPrecise(estimation)
)
关于javascript - 巴比伦平方根算法——初始猜测值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46024310/