题目:(https://leetcode-cn.com/problems/sqrtx/)
这一题可以用简单的二分来做,但在题解中看到了个以前没见过的解法:牛顿迭代法
具体方法是:假设方程 在
附近有一个根,那么用以下迭代式子:
,依次计算x1,x2....xn,那么算出来的xn会不断逼近真正的解。
所以f(x)的一次导是:
牛顿迭代式:
随便一个迭代的初始值,例如,代入上面的式子迭代。
例如计算,即a=2。
……
计算器上可给出
上面的过程来源这个:https://www.guokr.com/question/461510/
我理解的大致原理就是不断用一段直线去代替一段曲线,这样一直做下去就可以不断逼近真实解,至于为什么?
开个坑:https://www.zhihu.com/question/20690553
等我以后数学好点了再回来看吧..
//这题代码超短
class Solution {
public:
int mySqrt(int a) {
long long x = a;
while(x*x > a){
x = (x+a/x)/2;
}
return (int)x;
}
};
原文:https://www.cnblogs.com/Beic233/p/12857120.html