You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:35:10