自学Python编程:为何二分查找循环中需重复ans=(high+low)/2公式?
为什么二分查找求平方根的循环里要重复计算
ans = (high+low)/2.0? 这得从二分查找的核心逻辑说起:我们是通过不断缩小「可能包含平方根的区间」来逼近真实结果的,每一轮调整区间后,必须重新计算区间的中间值作为新的猜测值,否则整个查找过程根本推进不了。
拿你的代码一步步拆解:
- 初始时,我们设定查找区间是
[low=0.0, high=20.0],第一次的猜测值ans是这个区间的中间值10.0。 - 进入循环后,发现
10²=100远大于20,所以把区间的上限high调整为10.0——这时候新的查找区间变成了[0.0, 10.0]。 - 如果这时候不重新计算
ans,那ans还是原来的10.0,下一轮循环判断abs(100-20)依然远大于epsilon,而且high已经是10.0了,后续调整也不会改变ans,直接陷入死循环。
所以在循环里重新计算ans = (high+low)/2.0的作用是:
- 基于调整后的新区间,生成下一轮的猜测值
- 让这个猜测值不断逼近真实的平方根,直到满足误差要求
abs(ans² - x) < epsilon
简单说,二分查找就是每砍一半区间,就拿新的中间值再试,不更新这个中间值,查找就原地踏步,永远找不到结果。
内容的提问来源于stack exchange,提问作者Sakshi Dhage
相关产品推荐
相关产品推荐

