我如何递归写这个函数?

时间:2016-03-16 14:20:49

标签: python function recursion

我是一个python新手,我正在尝试一些递归但是我在使用递归编写这个特定函数时遇到了麻烦。

def Q(a,b,x):
  w = ""
  m = False
  for i in x:
    if i == a:
        m = True
    if m:
        w+= i
    if i == b:
        m = False
  return w

这是我尝试过的,我不知道我在哪里错了。我将不胜感激,谢谢。

def Q2(a,b,x):
  m = False
  while x != "":
    if x[0] == a:
        m = True
    if x[0] == b:
        m = False
    if m:
        return x[0] + Q2(a,b,x[1:])   #this doesn't return any output?

1 个答案:

答案 0 :(得分:1)

字符串递归的基本模式是具有空字符串基础情况,并且在递归情况下决定如何处理前导字符,然后在字符串的其余部分调用该函数。在你的某些特殊功能的情况下,你对第一个字符的处理取决于m的当前状态 - 因此m需要作为参数包含在内。为此,您可以创建一个包含明确m的帮助函数,如下所示:

def R(a,b,x,m):
    if x == '':
        return ''
    else:
        c = x[0]
        if c == a:
            m = True
        if m:
            keep = c
        else:
            keep = ''
        if c == b:
            m = False
        return keep + R(a,b,x[1:],m)

定义R后,主要功能可以使用适当的初始值m调用它:

def Q(a,b,x):
    return R(a,b,x,False)

例如,

>>> Q('x','y','aaxbbbycccxdddyeee')
'xbbbyxdddy'

与原始Q的输出结果一致。