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

Python嵌套if递归判断字符是否在有序字符串中部分场景返回None问题

错误原因
  • 递归调用分支缺少返回值
    你写的两个递归调用的分支(char小于中间字符、char大于中间字符),仅调用了isIn函数,没有用return返回递归调用的结果。当代码走到这两个分支时,函数执行完递归调用后没有显式的return语句,最终会默认返回None。
    以你第二个测试用例a='b'、s='bcd'为例:

第一次调用时字符串长度为3,中间索引为1,对应字符为c,b < c所以进入左半部分递归分支,调用isIn('b','b'),该内层调用正确返回True,但外层函数没有接收并返回这个结果,最终外层调用返回None,和你遇到的现象一致。

  • 右半部分字符串切片逻辑错误
    当char大于中间字符时,你的切片写为aStr[int(length/2):-1],末尾的:-1会切掉字符串的最后一个字符,导致你永远无法匹配到字符串的最后一位字符。正确的切片应该是从中间索引的下一位开始取到末尾,即aStr[int(length/2)+1:]。
修正后代码
def isIn(char, aStr):
    #char: a single character
    #aStr: an alphabetized string
    #returns: True if char is in aStr; False otherwise
    length = len(aStr)
    if length == 0:
        return False
    mid = int(length / 2)
    if char == aStr[mid]:
        return True
    elif char < aStr[mid]:
        # 返回左半部分的查询结果
        return isIn(char, aStr[:mid])
    else:
        # 返回右半部分的查询结果,切片调整为mid+1到末尾
        return isIn(char, aStr[mid+1:])

内容的提问来源于stack exchange,提问作者Franklin Don Xavier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:27:02