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):

我对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  
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。如果有其他方法,你就不用了。总有别的办法。