设平方根为x,则N=x²
f(x)=x²-N
f’(x)=2x,切线斜率为2x
则在f(x)在点Xn的切线方程为f(x)-(Xn²-N)=2Xn(x-Xn)
f(x)=0时
x=(Xn+N/Xn)/2
public static int newton(int x) { if(x==0) return 0; return ((int)(sqrts(x,x))); }public static double sqrts(double i,int x){ double res = (i + x / i) / 2; if (res == i) { return i; } else { return sqrts(res,x); } }
假设平方根是 i ,则 i 和 x/i 必然都是x的因子,而 x/i 必然等于 i ,推导出 i + x / i = 2 * i,得出 i = (i +x / i) / 2
由此得出解法,i 可以任选一个值,只要上述公式成立,i 必然就是x的平方根,如果不成立, (i + x / i) /2得出的值进行递归,直至得出正确解