cube root

QUESTION:

给定一个num,求它的立方根

EXPLANATION:

牛顿迭代法的思想就不说了。
复习了一遍牛顿迭代法,尝试用牛顿迭代法来求解立方根。
首先f(x) = x^3 - n ;
所以f’(x) = 3x^2 ;
代入牛顿迭代公式,简化为:t+1 = 2t/3

顺便记录一下牛顿迭代法的演变
f(x) = n 也就是我们需要求 f(x) - n = 0的值。那么要求这个值,利用牛顿迭代法的思想,我们需要确定一个xi,然后下一个点我们确定为xi+1,那么怎么确定xi+1呢,就需要做xi的切线,然后求出y=0时候的值就是xi+1的值了。
切线就为 y-f(xi) = f’(x)(x-xi)
将(xi+1,0)这个点带入,就变成了0-f(xi) = f’(x)(xi+1-xi)转换过来就是
xi+1 = xi-f(x)/f’(x);

SOLUTION:

        public static int cubeRoot(int n){
            long t = n/2;
            while (t*t*t > n)
                t = (2*t)/3;
            return (int)t;
        }