Python递归置换程序说明

2024-09-28 20:59:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码,它使用递归来计算字符串字符的排列。我很容易理解正常的尾部递归和回文,阶乘,十进制到二进制的转换的递归,但是我在理解这个递归是如何工作的,我是说它在后台是如何工作的,而不仅仅是我从更高层次得到的抽象的东西。在

这是密码

from __future__ import print_function

def permutef(s):
    #print('\nIM CALLED\n')
    out = []

    if len(s) == 1:
        out = [s]
    else:
        for i,let in enumerate(s):

            #print('LETTER IS {} index is {}'.format(let, i))

            #Slicing as not including that letter but includes every letter except that to perform the permutation

            for perm in permutef( s[:i] + s[i+1:] ):

                print(perm)

                out += [let + perm]
    return out


per = permutef('abc')

print('\n\n\n', per, '\n\n\n')

enter image description here

我在写一篇论文,每一个圆圈代表每一个字母,以及对应的堆栈是如何弹出的

别问我的笔迹,我知道它太棒了(讽刺)

这是输出屏幕截图

enter image description here

我想了解这个背景下是如何工作的,但我似乎无法理解这个概念,非常感谢。在


Tags: 字符串代码inforthat二进制out字符
1条回答
网友
1楼 · 发布于 2024-09-28 20:59:35
 1  def permutef(s):
 2      out = []
 3      if len(s) == 1:
 4          out = [s]
 5      else:
 6          for i,let in enumerate(s):
 7              for perm in permutef( s[:i] + s[i+1:] ):
 8                  print(perm)
 9                  out += [let + perm]
10      return out

原理相当简单。一个单字符字符串(第3行)只有一个排列,由包含该字符的列表(第4行)表示。较长字符串的排列是通过获取字符串中的每个字符并排列其余字符来生成的—这是一种相当经典的递归分而治之方法。在

{alise}这类问题对你的站点执行很有用。我提供的链接已经预装了上面的代码,你可以在代码中前后移动,直到你理解了它是如何工作的。在

相关问题 更多 >