代码的递归版本

时间:2014-02-11 17:07:58

标签: python

在确定字符串是否是另一个字符串的子序列时,我有以下代码:

def subseq(strA, strB):
    if not strA:
        return True
    else:
        for char in strB:
            if strA:
                strA = strA[char == strA[0]:]
    return strA == ""

>>> subseq('cat', 'XIKSLPWswifmscakst')
True
>>> subseq('cat', 'XIKSLPWswifmsctksa')
False

虽然这很好,有没有办法递归地解决这个问题?

1 个答案:

答案 0 :(得分:1)

迭代版本通常在Python上运行得更好,因为它没有尾调用优化,而且函数调用很重。但作为练习,这是我的解决方案。

def subseq(needle, haystack):
    if not needle: return True
    if len(needle) > len(haystack): return False
    if needle[0] == haystack[0]: 
        return subseq(needle[1:], haystack[1:])
    else: 
        return subseq(needle, haystack[1:])

但请勿使用此功能!

  • 它会导致长字符串(len(s) > sys.getrecursionlimit())上的堆栈溢出。
  • 它将构建许多中间字符串(每个片段返回另一个副本)
  • 迭代版本同样可读。