算法题-求立方根
求解立方根
https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca?tpId=37&tqId=21330&tPage=6&rp=&ru=%2Fta%2Fhuawei&qru=%2Fta%2Fhuawei%2Fquestion-ranking
题目描述
•计算一个数字的立方根,不使用库函数
详细描述:
•接口说明
原型:
public static double getCubeRoot(double input)
输入:double 待求解参数
返回值:double 输入参数的立方根,保留一位小数
输入描述:
待求解参数 double类型
输出描述:
输入参数的立方根 也是double类型
题解
设函数f(x) = x3 - A,若求A的平方根,则有f(x) = 0
由牛顿迭代公式 x = x0 - f(x0) / f `(x0)
得到下一个近似值xn+1 = xn - (xn3 - A) / (3xn2) = xn - (x3 - A)/xn2 /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; }