我读了计算任何数字的平方根的方法,算法如下:
double findSquareRoot(int n) { double x = n; double y = 1; double e = 0.00001; while(x-y >= e) { x = (x+y)/2; y = n/x; } return x; }
我对这种方法的问题是
它如何计算平方根?我不了解其背后的数学原理。如何x=(x+y)/2 and y=n/x收敛到n的平方根。解释这个数学。
x=(x+y)/2 and y=n/x
该算法的复杂性是什么?
很容易看出您是否进行了一些运行并打印了x和y的连续值。例如100:
50.5 1.9801980198019802 26.24009900990099 3.8109612300726345 15.025530119986813 6.655339226067038 10.840434673026925 9.224722348894286 10.032578510960604 9.96752728032478 10.000052895642693 9.999947104637101 10.000000000139897 9.999999999860103
见,诀窍是,如果x是 不 的平方根n,那么它是高于或低于实际的根,并n/x始终是在另一侧上。所以,如果你计算的中点x,并n/x会在一定程度上更接近真正的根。
x
n
n/x
关于复杂性,它实际上是无限的,因为真正的根永远都不会到达。这就是为什么要使用e参数。
e