求助:我编写的递归二分搜索算法为何返回None?
递归二分搜索返回None的问题解决方法
你的代码核心问题是递归调用时没有返回结果:当目标元素在左半区或右半区时,你调用了recursionSearch但没有用return把递归得到的结果传递回去,函数执行完这些分支后没有返回值,Python就会默认返回None。
修正后的代码如下:
def recursionSearch(target, numlist): if len(numlist) == 0: return -1 mid = len(numlist)//2 if numlist[mid] == target: return mid elif target < numlist[mid]: return recursionSearch(target, numlist[:mid]) # 加上return传递递归结果 else: return recursionSearch(target, numlist[mid+1:]) # 加上return传递递归结果
需要注意的是,上面的代码返回的是当前子列表中的索引,而非原列表的原始索引。如果需要返回原列表的索引,你需要额外传递当前子列表在原列表中的偏移量,示例如下:
def recursionSearch(target, numlist, offset=0): if len(numlist) == 0: return -1 mid = len(numlist)//2 if numlist[mid] == target: return offset + mid elif target < numlist[mid]: return recursionSearch(target, numlist[:mid], offset) else: return recursionSearch(target, numlist[mid+1:], offset + mid + 1)
内容的提问来源于stack exchange,提问作者Johnny96
相关产品推荐
相关产品推荐

