Python 代码的递归版本

Python 代码的递归版本,python,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', 'XIKS

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

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

虽然这很好,但有没有一种方法可以递归地解决这个问题?

迭代版本通常在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>sys.getrecursionlimit()
  • 它将构建许多中间字符串(每个片段返回另一个副本)
  • 迭代版本同样可读
为什么不尝试编写一个递归版本,然后在遇到问题时发布。为什么
'cat'
'cakst'
的子序列?Python在'LASJLFJD'中提供了
'cat';lfasdcat'
@JaredBurrows但如果“catcat”中的“cat”则不会:检查cat是子字符串吗?虽然子序列是一个序列,可以通过删除某些元素而不改变其余元素的顺序,从另一个序列中派生出来?对,但这不是一个破坏者,因为他要求这样做。我玩得很开心。