这是一个学术练习.我正在Python中实现sqrt函数.这是我的代码,
def mySqrt(x):
low, high = 1, x
while low < high:
mid = low + (high - low)/2
if mid * mid > x:
high = mid - 1
elif mid * mid < x:
low = mid
else:
return mid
return low
Run Code Online (Sandbox Code Playgroud)
问题是,当数字不是一个完美的正方形时,这不起作用.我想重新设计这个函数仍然使用log n复杂度,它将sqrt的值返回到指定的小数位数.所以它就像,
def sqrt(num, param):
pass
Run Code Online (Sandbox Code Playgroud)
从而
sqrt(5, 2) = 2.41
sqrt(5, 3) = 2.414
Run Code Online (Sandbox Code Playgroud)
有人可以帮我弄这个吗.谢谢.
你可以使用巴比伦方法.
def sqrt(x):
n = 1
for _ in range(10):
print(n)
n = (n + x/n) * 0.5
Run Code Online (Sandbox Code Playgroud)
它收敛速度极快.这是一个例子sqrt(2):
1
1.5
1.41666666667
1.41421568627
1.41421356237
1.41421356237
1.41421356237
1.41421356237
1.41421356237
1.41421356237
Run Code Online (Sandbox Code Playgroud)
用于sqrt(3):
1
2.0
1.75
1.73214285714
1.73205081001
1.73205080757
1.73205080757
1.73205080757
1.73205080757
1.73205080757
Run Code Online (Sandbox Code Playgroud)
现在您只需要用一个精度条件替换for循环while并返回结果而不是仅仅打印它.