P8-x的平方根-牛顿迭代
//x的平方根 /* * 在不使用sqrt(x)的情况下,得到x的平方根的整数部分 * */ public class P8 { public static void main(String[] args) { System.out.println(newton(12)); } //牛顿迭代 /* * 跟微积分有关, y = x平方,是一个y轴对称的二次函数 * y/x = x,回想一下P3中12的(2*6) (3*4) (4*3) (6*2) * 关于 (根号12 * 根号12)对称,y/x=根号12,x=根号12 * 并且前后两个数的平均值会比前后两个数更接近结果 * 如 2的平方=4,6的平方=36,它们的平均值4的平方=16,更接近12, * 即 y/x 和 x 的平均值会更接近结果 根号y即x (y/x = x) * * */ private static int newton(int y) { if(y == 0){ return 0; } return (int) sqrt(y, y); //第一个数是什么没有关系,正整数就可以,影响的是递归次数,会不断的找均值最终趋向x } // public static double sqrt(double x, int y) { double res = (x + y / x) / 2; if (res == x) { return x; //直到找到确切的根号y,即x } else { return sqrt(res, y); //不停找均值 } } }