华为上机考试题系列(二):HJ107求解立方根

题目:不用库函数求某数的立方根。

三种方法包括pow函数、二分法、牛顿迭代法,本文重点讲下效率最高的牛顿迭代法

关于牛顿迭代法,我觉得可以参考每日一问之初识牛顿迭代法(Newton's method)这篇文章,讲解得很浅显易懂

华为上机考试题系列(二):HJ107求解立方根_第1张图片

华为上机考试题系列(二):HJ107求解立方根_第2张图片

为什么求解立方根可以使用牛顿迭代法?立方根函数也是曲线函数,同样适用于牛顿迭代法,下面是求解过程:

关于这道题目千万不要把导函数求错,如果导函数求错,结果肯定错误

华为上机考试题系列(二):HJ107求解立方根_第3张图片

python实现:

第一种写法:(这种写法会运行超时)
a=float(a)
print(a)
x = a 
while x*x*x > a:
    x = (8*x+a/(x*x))/9
print(x)
第二种写法:通过了牛客网的测试
import sys
import math
def f(x,m):
    return x**3 - m

def f_derivative(x):
    return 3*x**2

ep = 0.000001
for a in sys.stdin:
    a=float(a)
    x = a 
    k = 1
    while ep 

参考文章:

求解一个数的立方根(想不懂都难)

面试算法题:求一个数的立方根

 

你可能感兴趣的:(数据结构与算法)