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