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
相关产品推荐
相关产品推荐

