递归法求立方根/平方根

236 阅读1分钟
def getCubicRoot(n, l, h):
    margin = 0.001
    m = (l+h)/2
    diff = m*m*m - n
    if diff > margin:
        return getCubicRoot(n,l,m)
    elif -diff > margin:
        return getCubicRoot(n,m,h)
    else:
        return m       #when |diff|<=margin

def cubicRoot(n):
    result = getCubicRoot(n,0,n)
    return result

引入margin原因为浮点数的计算不精确,m3m^3可能永远也≠n,因此递归的base可能永远也达不到,超出recursive depth。故引入marginroot,当误差小于某个特别小的值,就认为找到了这样的立方根。