理解递归(置换)Python

时间:2017-01-29 23:42:12

标签: python-3.x recursion

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:] =''

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,稍后返回到递归调用)。