Python中递归函数的说明
我对Python还不熟悉,并试图对递归函数了如指掌。我理解整个概念,但我遇到了一个例子,我似乎不能完全理解它在做什么。一步一步地对正在发生的事情进行分类是理想的,提前感谢您的帮助Python中递归函数的说明,python,recursion,Python,Recursion,我对Python还不熟悉,并试图对递归函数了如指掌。我理解整个概念,但我遇到了一个例子,我似乎不能完全理解它在做什么。一步一步地对正在发生的事情进行分类是理想的,提前感谢您的帮助 def anagrams(s): if s == '': return [s] else: ans = [] for w in anagrams(s[1:]): for pos in range(len(w)+1):
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
def字谜:
#如果参数是空字符串
如果s='':
#返回一个列表就在其中
返回[s]
其他:
#创建一个列表
ans=[]
#对于递归调用此函数时的每个字符串,
#但是删除字符0!
对于字谜中的w(s[1:]):
#对于从0开始到结束的字符位置号
#递归函数返回值的长度
#加1
对于范围内的位置(透镜(w)+1):
#使用以下连接方式追加字符串:
#-从位置0到位置0的返回值字符串
#-的位置0处的字符
#-从位置到结尾的返回值字符串
ans.append(w[:pos]+s[0]+w[pos:]
#返回列表
返回ans
def字谜:
#如果参数是空字符串
如果s='':
#返回一个列表就在其中
返回[s]
其他:
#创建一个列表
ans=[]
#对于递归调用此函数时的每个字符串,
#但是删除字符0!
对于字谜中的w(s[1:]):
#对于从0开始到结束的字符位置号
#递归函数返回值的长度
#加1
对于范围内的位置(透镜(w)+1):
#使用以下连接方式追加字符串:
#-从位置0到位置0的返回值字符串
#-的位置0处的字符
#-从位置到结尾的返回值字符串
ans.append(w[:pos]+s[0]+w[pos:]
#返回列表
返回ans
如果它是一个空白字符串,则没有其他字谜,返回一个仅包含该空白字符串的列表
否则,
for w in anagrams(s[1:]):
将s
分隔为第一个字符(s[0]
)和所有其他字符的子字符串(s[1://code>)。再次调用该函数以查找子字符串的所有字谜(即w
s)
然后,在w
中的任何可能位置(pos
)插入s
的第一个字符
这是一个带有一个小print语句的函数,它有助于了解发生了什么
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
尝试:
一,
输出:
level 1, s[0]: a, w:
level 1, s[0]: a, w:
level 2, s[0]: b, w: a
二,
输出:
level 1, s[0]: a, w:
level 1, s[0]: a, w:
level 2, s[0]: b, w: a
三,
如果它是一个空白字符串,则没有其他字谜,返回一个仅包含该空白字符串的列表
否则,
for w in anagrams(s[1:]):
将s
分隔为第一个字符(s[0]
)和所有其他字符的子字符串(s[1://code>)。再次调用该函数以查找子字符串的所有字谜(即w
s)
然后,在w
中的任何可能位置(pos
)插入s
的第一个字符
这是一个带有一个小print语句的函数,它有助于了解发生了什么
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
尝试:
一,
输出:
level 1, s[0]: a, w:
level 1, s[0]: a, w:
level 2, s[0]: b, w: a
二,
输出:
level 1, s[0]: a, w:
level 1, s[0]: a, w:
level 2, s[0]: b, w: a
三,
嘘!我听说你在递归方面有问题。阅读直到你明白为止。@ElliottFrisch真的快死了,我的好朋友玩得很好递归有三件事需要知道:1。递归的工作原理2。如果有其他方法,你就不用了。总有别的办法。嘘!我听说你在递归方面有问题。阅读直到你明白为止。@ElliottFrisch真的快死了,我的好朋友玩得很好递归有三件事需要知道:1。递归的工作原理2。如果有其他方法,你就不用了。总有别的办法。