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

Python自定义binarySearch方法返回NoneType而非int的原因求解

问题原因分析
  • 递归调用未显式返回结果
    你在binarySearch方法的两个数值比较分支中,仅执行了递归调用逻辑,没有将递归调用的返回值作为当前方法的返回值返回。Python中所有函数如果执行结束未命中任何return语句,会默认返回None:当你要查找的目标值不在mid位置时,递归调用的结果没有被传递回上层调用,最终方法就会返回None而非预期的int值。
  • 中位数计算逻辑错误
    你当前的mid = (r - l + 1) // 2仅计算了当前搜索区间的中间位置偏移量,没有叠加左边界l,导致mid的取值根本不在当前搜索的[l, r]区间内,会出现数组访问越界、查找位置错误的问题,即使补充了return逻辑也无法得到正确结果。
修正后的代码
class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        nums.sort()
        index = self.binarySearch(nums, 0, len(nums) - 1, target)
        return index
        
    def binarySearch(self, nums, l, r, target):
        if r >= l:
            # 修正mid计算逻辑,加上左边界l
            mid = l + (r - l) // 2
            if nums[mid] == target:
                return mid
            elif nums[mid] < target:
                # 补充return,返回递归调用的结果
                return self.binarySearch(nums, mid + 1, r, target)
            else:
                # 补充return,返回递归调用的结果
                return self.binarySearch(nums, l, mid-1, target)
        else:
            return -1

内容的提问来源于stack exchange,提问作者Edward Wong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:54:03