python二进制加法递归_Python中的递归二进制搜索命中递归上限

所以我在Python中编写了一个递归二进制搜索算法,除了我尝试过一定数量之外,它工作得很好......

我正在处理已经排序的10,000个随机数字列表。

最终因此错误而失败:

RecursionError: maximum recursion depth exceeded while calling a Python object

我已在功能内放置计数器以跟踪低/高点和当前搜索计数。当我运行bSearch(3333)时,我得到了上面的错误和这个奇怪的输出......

0 None 1

0 4998 2

0 2498 3

0 1248 4

0 623 5

312 623 6

312 466 7

312 388 8

312 349 9

331 349 10

331 339 11

336 339 12

338 339 13

338 337 14

338 337 15

它一直在重复338 337,直到它达到了诅咒上限。

这是我的功能:

def bSearch(list, value, lowPoint=0, highPoint=None, searchNum=1):

print(lowPoint,highPoint,searchNum)

searchNum += 1

if highPoint is None:

highPoint = len(list) - 1

if lowPoint == highPoint:

if list[lowPoint] == value:

return lowPoint, searchNum

else:

return -1, searchNum

midPoint = (lowPoint + highPoint) // 2

if list[midPoint] > value:

return bSearch(list, value, lowPoint, midPoint - 1, searchNum)

elif list[midPoint] < value:

return bSearch(list, value, midPoint + 1, highPoint, searchNum)

else:

return midPoint

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值