Python二分查找函数未返回预期-1却返回None的原因求助
二分查找返回None的问题分析
核心问题1:递归终止条件缺失
你的函数仅在r>l时执行查找逻辑,当查找范围失效(r <= l)时,函数没有任何return语句,Python默认会返回None——这是返回值为None的直接原因。
正确逻辑应为:当r < l时,说明元素不在数组中,直接返回-1;而非仅在r>l时执行逻辑。
核心问题2:递归调用的参数错误
当前代码的范围缩小逻辑完全颠倒:
- 当
arr[mid] > element时,元素应在左半部分,需将右边界设为mid-1,但你传的是mid+1,导致范围错误。 - 当
arr[mid] < element时,元素应在右半部分,需将左边界设为mid+1,但你传的是mid-1,同样导致范围错误。
问题3:结果判断逻辑错误
用result < num-1判断元素是否存在完全错误:
- 若找到最后一个元素(索引4),
4 <4不成立,会误判为“not found”。 - 若返回-1(元素不存在),
-1 <4成立,会误判为“Element is present at index -1”。
修正后的代码
def binary_search(arr, element, r, l): # 查找范围失效时返回-1 if r < l: return -1 mid = l + (r - l) // 2 if arr[mid] == element: return mid elif arr[mid] > element: # 去左半部分查找 return binary_search(arr, element, mid-1, l) else: # 去右半部分查找 return binary_search(arr, element, r, mid+1) arr = [1,2,3,4,5] element = 6 result = binary_search(arr, element, len(arr)-1, 0) print(result) # 正确判断逻辑:返回-1则未找到,否则输出索引 if result == -1: print("not found") else: print("Element is present at index ", result)
内容的提问来源于stack exchange,提问作者zzzz
相关产品推荐
相关产品推荐

