Python递归排列程序解释

时间:2017-10-01 18:34:04

标签: python algorithm recursion

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

这是代码

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

我想了解关于它如何在后台工作的细节,但我似乎无法理解这个概念,非常非常感谢提前。

1 个答案:

答案 0 :(得分:2)

cdef Detection_create(apriltag_detection_t* d):
    return Detection()._setup(d)

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

对于这样的问题,Python Tutor站点可用于可视化代码的执行。我提供的链接预先加载了上面的代码,您可以在代码中前进和后退,直到您了解它是如何工作的。