我是一个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?
答案 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
的输出结果一致。