两种方法求解一个数的平方根

893 阅读1分钟

一种经典的求解思路就是使用二分法。

可以使用二分法的原因是y=x^2是单调递增的

二分法

递归版本

function sqrt(n){
  return _sqrt(0,n)
  function _sqrt(left,right){
      if(Math.abs((left-right))<1e-9){
          return left
      }
      let mid = (left+right)/2 
      let y = mid * mid 
      if(y>n){  
        return  _sqrt(left,mid)
      }else if(y==n){
          return mid
      }else{
        return _sqrt(mid,right)
      }
  }
}

迭代版本

function sqrt(n){
    if(n===0 || n===1){
        return n;
    }
    let left = 0;
    let right = n;
    let mid;
    let y;
    while(Math.abs((right-left))>1e-9){
        mid = (left+right)/2;
        y = mid * mid;
        if(y>n){
            right = mid;
        }else if(y===n){
            return mid
        }else{
            left = mid;
        }
    }
    return left
}

牛顿迭代法

牛顿迭代法的原理

function sqrt(n){
    let x = n;
    while(x * x >n)
        x = (x+n/x)/2
    return x
}