巴比伦平方根算法 - 初始猜测值

时间:2017-09-03 14:15:05

标签: javascript algorithm math

我一直在寻找用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参数。

1 个答案:

答案 0 :(得分:1)

estimation在迭代函数内定义。

当函数第一次运行时,使用num参数return iteration(num)调用迭代函数。

iteration函数内部,算法首先检查估计是否正常。

如果没有,则会再次调用iteration,但这一次,它首先会改善给定的estimation

return iteration(improvePrecision(estimation));

所以iteration是递归函数,除非估计足够精确,否则它将调用自身:(isPrecise(estimation)