关于每日算法求整数的平方根--牛顿迭代法详解

278 阅读1分钟

题目

实现 int sqrt(int x) 函数。 计算并返回x的平方根,其中x是非负整数。 由于返回类型是整数,结果只保留整数部分,小数部分将被舍去 示例1 输入:4 输出:2 示例2 输入:8 输出:2 说明8的平方根是2.82842..., 由于返回类型是整数,小数部分将被舍去。

解析

求解平方根,直接用暴力法是 pow(x,0.5)=y, 求解y, 这种方法会存在内存错误的问题,我们采用牛顿迭代法

牛顿迭代法解析

牛顿迭代法,我们可以通过这样一种方法来理解:求长方形越来越近似与其面积相同的正方形 看如下图:

image.png

代码

我用python代码实现

def f2(number):
    # 牛顿迭代法
    if number < 0:
        return False
    if number == 0:
        return 0
    # 假设当前的平方根是1,类似当前的长方形的边长
    cur_sqrt_value = 1
    while True:
        pre = cur_sqrt_value  # 保存之前的值
        cur_sqrt_value = (cur_sqrt_value + number/cur_sqrt_value) / 2  # 类似计算长方形的长和宽的平均值
        if abs(cur_sqrt_value - pre) < 1e-6:  # 1e-6是一个非常小的小数,趋近于0,意思就是这时候长方形的边长趋近于正方形的边长,长方形变得像正方形
            return int(cur_sqrt_value)