【问题标题】:Understanding Recursion(permutations) Python了解递归(排列)Python
【发布时间】:2017-01-30 08:12:11
【问题描述】:
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')

s[1:] ='bc'

烫发('bc')

s[1:]='c'

烫发('c')

s[1:]=''

【问题讨论】:

标签: python-3.x recursion


【解决方案1】:

由于您递归调用:smaller = perms(s[1:]) 变量smaller 被赋值为调用perms(s[1:]) 返回的任何内容。

s = 'bc'i=1p='c'表达式:

new_perm = p[:i] + s[0] + p[i:]

被评估为cb(在下一行被附加到bigger,然后返回到递归调用)。

【讨论】:

  • 当 i=0 时会发生什么?
  • 复制表达式,分配i = 0 并打印表达式 - 你会看到它的确切结果。请记住,smaller 中的每个不同值和smaller 中的每个字符都有不同的值!
  • "当 s = 'bc' and i=1 and p='c'" 我的意思是在 i-0 而不是 1 时会发生什么
  • 你可以分配变量,打印出来看看它会将'bc'分配到new_perm
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多