我是Python的新手,正在尝试将我的头放在递归函数上。我正在理解总体概念,但是遇到了一个例子,我似乎无法完全理解它在做什么。逐步分解正在发生的事情将是理想的,请提前了解帮助。
def anagrams(s):
if s == '':
return [s]
else:
ans = []
for w in anagrams(s[1:]):
for pos in range(len(w)+1):
ans.append(w[:pos] + s[0] + w[pos:])
return ans
答案 0 :(得分:1)
def anagrams(s):
# if argument <s> is a blank String
if s == '':
# return a list is just <s> in it
return [s]
else:
# create a List
ans = []
# for each String character in calling this function recursively,
# but removing character 0!
for w in anagrams(s[1:]):
# for character position number starting at 0 and ending at
# the length of the returned value of the recursed function
# plus 1
for pos in range(len(w)+1):
# append a string with the following concatenation:
# - the returned value's string from position 0 to position <pos>
# - the character at position 0 of <s>
# - the returned value's string from position <pos> to the end
ans.append(w[:pos] + s[0] + w[pos:])
# return the list
return ans
答案 1 :(得分:1)
if s == '':
return [s]
如果它是一个空字符串,则没有其他字谜,请返回仅包含该空字符串的列表。
否则,
for w in anagrams(s[1:]):
将s
分隔为第一个字符(s[0]
)和所有其他字符的子字符串(s[1:]
)。再次调用该函数以查找子字符串的所有字谜(那些w
),
for pos in range(len(w)+1):
ans.append(w[:pos] + s[0] + w[pos:])
然后针对其中每一个,在s
中的任何可能位置(pos
)插入w
的第一个字符。
这是您的函数,带有一些打印语句,可帮助您了解发生了什么事情。
def anagrams(s):
if s == '':
return [s]
else:
ans = []
level = len(s)
for w in anagrams(s[1:]):
print('level %d, s[0]: %s, w: %s' % (level, s[0], w))
for pos in range(len(w)+1):
ans.append(w[:pos] + s[0] + w[pos:])
return ans
尝试:
1。
anagrams('a')
输出:
level 1, s[0]: a, w:
2。
anagrams('ba')
输出:
level 1, s[0]: a, w:
level 2, s[0]: b, w: a
3。
anagrams('cba')
level 1, s[0]: a, w:
level 2, s[0]: b, w: a
level 3, s[0]: c, w: ba
level 3, s[0]: c, w: ab