• X的平方根的golang实现


    实现 int sqrt(int x) 函数。

    计算并返回 x 的平方根,其中 x 是非负整数。

    由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

    输入: 4
    输出: 2
    输入: 8
    输出: 2
    说明: 8 的平方根是 2.82842...,由于返回类型是整数,小数部分将被舍去。

    首先遇到这种题目肯定要想到使用内置得api来解答:

    //使用api来求解
    func mySqrt(x int) int {
        f := float64(x)
        ff := math.Sqrt(f)
        return int(ff)
    }
    其次我们可以使用牛顿法求平方根:

    牛顿法:(以本题为例子)

    计算平方根,其实就是计算

    x^2 =n

    的解

    令f(x)=x2-n,相当于求解f(x)=0的解,如上图所示。

    首先取x0,如果x0不是解,做一个经过(x0,f(x0))这个点的切线,与x轴的交点为x1。

    同样的道理,如果x1不是解,做一个经过(x1,f(x1))这个点的切线,与x轴的交点为x2。

    以此类推。

    以这样的方式得到的xi会无限趋近于f(x)=0的解。

    判断xi是否是f(x)=0的解有两种方法:

    一是直接计算f(xi)的值判断是否为0,二是判断前后两个解xi和xi-1是否无限接近。

    经过(xi, f(xi))这个点的切线方程为f(x) = f(xi) + f’(xi)(x - xi),其中f'(x)为f(x)的导数,本题中为2x。令切线方程等于0,即可求出xi+1=xi - f(xi) / f'(xi)。

    继续化简,xi+1=xi - (xi2 - n) / (2xi) = xi - xi / 2 + n / (2xi) = xi / 2 + n / 2xi = (xi + n/xi) / 2。

    迭代公式就已经出来了

    x = (x + n/x) / 2

    那么代码:

    //使用牛顿法求平方根
    func mySqrt1(x int) int {
        res := x
        //牛顿法求平方根
        for res*res > x {
            res = (res + x/res) / 2
        }
        return res
    }
  • 相关阅读:
    aircrack-ng 多网卡启动后环境清理
    Docker create image
    预加载(学习一)
    activity+fragment多次切换出现页面空白问题
    万能的Volley
    关于下拉刷新你是否真的非常理解还是只会搬砖?附 Android 实例子源代码文件下载地址380个合集
    如何将Java源代码文件的编码从GBK转为UTF-8?
    如何操作笔记本显得逼格很高?
    跑马灯源代码
    关于java、Android中Math的一些用法
  • 原文地址:https://www.cnblogs.com/TimLiuDream/p/10067742.html
Copyright © 2020-2023  润新知