二分查找法求某数的任意次方根
- Python
- 2016-08-29
- 128热度
- 0评论
以下代码出自 MOOC 《计算机科学和 Python 编程导论》第四讲。
这段代码比较简单,但至少有以下值得注意和学习的地方:
- 二分查找法的使用
- 测试用例覆盖所有情况(在这里是:正数、负数、绝对值大于 1、绝对值小于 1)
- 对 low 和 high 赋值的方式,比较巧妙
- 为每个功能函数添加说明文档(即使工作多年的职业程序员,也不一定做到)
def findRoot(x, power, epsilon):
"""x and epsilon int or float, power an int
epsilon > 0 & power >= 1
returns a float y s.t. y**power is within epsilon of x.
if such a float does not exist, it returns None"""
if x < 0 and power % 2 == 0:
return None
# can't find even powered root of negative number
low = min(-1, x)
high = max(1, x)
ans = (high + low) / 2.0
while abs(ans**power - x) > epsilon:
if ans**power < x:
low = ans
else:
high = ans
ans = (high + low) / 2.0
return ans
if __name__ == "__main__":
print findRoot(0.25, 3, .001)
print findRoot(-0.25, 3, .001)
print findRoot(25, 2, .001)
print findRoot(-27, 3, .001)