基本思想是:
避免循环条件未更新
以二分为例:
# find right edge
l, r = 0, n-1
while l<r:
mid = (l + r + 1)//2
if que[mid] <= x:
l = mid
else:
r = mid -1
mid=(l+r+1)//2,这里为什么要+1呢?
因为如果递推过程中,l,r逐渐接近,会出现l=r-1的情况。此时如果
mid=(l+r)//2,
即mid=l, 代入循环条件,将出现
l=l
导致死循环。
因此,检查死循环的方法是:
沿循环条件考虑接近情况,是否会出现循环条件不更新的情况。