def perms(s):
'''(str) -> list of str
Return all permutations of s.
'''
if s == '':
return ['']
smaller = perms(s[1:])
print(smaller)
bigger = []
for p in smaller:
for i in range(len(p) + 1):
new_perm = p[:i] + s[0] + p[i:]
bigger.append(new_perm)
return bigger
perms('abc')
这是我教授的代码。我知道这个代码的递归是如何工作的,但似乎无法弄清楚小的等于“cb'
烫发(' ABC&#39)
s [1:] =' bc'
烫发(' BC&#39)
S [1:] =' C'
烫发(' C&#39)
S [1:] =''
答案 0 :(得分:0)
由于您以递归方式调用:smaller = perms(s[1:])
变量smaller
被分配了从调用perms(s[1:])
返回的任何内容。
s = 'bc'
和i=1
以及p='c'
表达式:
new_perm = p[:i] + s[0] + p[i:]
被评估为cb
(在下一行附加到bigger
,稍后返回到递归调用)。