【发布时间】:2016-09-10 09:27:48
【问题描述】:
有没有办法编写一个递归(必需)函数,它接受两个字符串作为参数,如果第一个字符串中的所有字符都可以按顺序在第二个字符串中找到,则返回 True;否则为 False?
例如:
>>> contains("lit", "litter")
True
>>> contains("thot", "thurtle")
False
>>> contains("ratchet", "ramtbunchiousest")
True
>>> contains("shade", "hadsazie")
False
字母不需要连续(如第三个示例),但它们必须按顺序排列(这就是第四个示例失败的原因)。
我写了这段代码:
def contains_recursive(s1, s2):
if s1 == "":
return True
elif s1[0] == s2[0]:
return contains_recursive(s1[1:], s2[1:])
elif s1[0] != s2[0]:
return contains_recursive(s1[0], s2[1:])
else:
return False
return contains_recursive(s1, s2) == True
它给出了这个错误:
IndexError: string index out of range
我应该怎么做才能解决这个问题?
【问题讨论】:
-
为什么需要递归?学习清酒、作业,还是……?
-
@croesus 无需递归,您可以使用“in”运算符 ex: result_bool = substring in string
-
@AnjaneyuluBatta - 除非字符是连续的,否则将返回
False。 -
问题似乎在这里:
elif s1[0] != s2[0]: return contains_recursive(s1[0], s2[1:])。当s1[0] != s2[0]时,它会递归调用自己,将s2[1:]传递给contains_recursive。当它运行到s2的长度为1 时,它会抛出错误,因为s2[1:]超出范围。