题目描述

•计算一个数字的立方根,不使用库函数

详细描述:

•接口说明

原型:

public static double getCubeRoot(double input)

输入:double 待求解参数

返回值:double  输入参数的立方根,保留一位小数


输入描述:

	

待求解参数 double类型

输出描述:

	

输入参数的立方根 也是double类型

示例1

输入

复制
216

输出

复制
6.0



题解

设函数f(x) = x3 - A,若求A的平方根,则有f(x) = 0

由牛顿迭代公式 x = x0 - f(x0) / f `(x0)

得到下一个近似值xn+1 = xn - (xn- A) / (3xn2) = xn - (x3 - A)/xn/3 = xn - (xn - A/xn/xn)/3 = (A/xn/xn + 2 * xn)/3



代码实现:
#include <bits/stdc++.h>
double func(double guess,double x)
{
    if(std::abs(guess * guess * guess - x) < 0.0000001)
        return guess;
    else
        return func((x / guess / guess + 2 * guess) / 3, x);
}
int main(int argc, char * argv[])
{
    double dInput;
    std::cin >> dInput;
    double guess = 1;
    printf("%.1f", func(guess, dInput));
    return 0;
}