求助:判断string1是否为string2子串的递归函数报错排查
排查你的递归子串检查函数问题
我帮你梳理下代码里的几个关键问题,这些问题导致函数无法正常运行:
1. 错误的空字符串判断逻辑
你写的if s2 == 0:完全不对——s2是字符串类型,和数字0比较永远不会相等。而且就算改成判断空字符串,你的返回逻辑也反了:如果s2已经被截到空了还没找到s1,说明s1不是s2的子串,应该返回False,而不是True。
2. 递归调用未返回结果
当当前s2不以s1开头时,你调用了subs(s1, s2[1:])但没有返回这个递归的结果,导致递归的后续判断完全没起作用。函数在这种情况下会默认返回None,而不是正确的布尔值。
3. 多余的递归调用
当s2.startswith(s1)为True时,你不需要再调用递归,直接返回True就可以了——已经找到匹配的子串了。
4. 小笔误
main函数里的输入提示enter steing应该是enter string,虽然不影响运行,但会误导用户。
修正后的代码
def main(): s1 = input("enter string 1: ") s2 = input("enter string 2: ") sub = subs(s1, s2) print(sub) def subs(s1, s2): # 先处理边界:如果s1是空字符串,按定义返回True(可选,根据需求调整) if not s1: return True # 如果s2已经空了还没找到,返回False if not s2: return False # 当前开头匹配,直接返回True if s2.startswith(s1): return True # 不匹配就截掉第一个字符,递归检查剩余部分,并且返回递归结果 return subs(s1, s2[1:]) main()
测试示例
- 输入
s1="abc",s2="xyzabc123",会返回True - 输入
s1="test",s2="hello world",会返回False - 输入
s1="",任何s2都会返回True(如果不需要这个逻辑,可以去掉对应的判断)
内容的提问来源于stack exchange,提问作者Aya
相关产品推荐
相关产品推荐

