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

求助:判断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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:24:02