0

我无法为以下排列代码绘制递归树:

def permut(array):

    if len(array) == 1:
        return [array]
    res = []
    for permutation in permut(array[1:]):
        print permutation, array
        for i in range(len(array)):
            res.append(permutation[:i] + array[0:1] + permutation[i:])
    return res

假设我的数组是“mick”,那么我得到以下排列和数组的打印输出:

k 和 ck

ck 和 ick

kc和ick

伊克和米克

我理解它直到'k'和'ck'(当array ='ck'len(arraw [1:])== 1)但是我们如何在递归中将'ick'作为一个数组?你能想象一下吗?非常感谢任何提示!

4

1 回答 1

1
permut('Mick')                 # recursion: for permutation in permut('ick')
    permut('ick')              # recursion: for permutation in permut('ck')
        permut('ck')           # recursion: for permutation in permut('k')
            permut('k')        # return ['k']
        permut('ck')           # continue from the loop
                               # print each element of ['k'] with 'ck'
                               # return res, which is ['ck', 'kc']
    permut('ick')              # continue from the loop
                               # print each of ['ck', 'kc'] with 'ick'
                               # return res, which is ['ick', 'cik', 'cki', 'ikc', 'kic', 'kci']
permut('Mick')                 # continue from loop
                               # print each of the above elements + 'Mick' individually
                               # return res, which is... long

以上基本上是对单词中所有字母进行了置换,可以简单的用

>>> import itertools as it
>>> res = list(''.join(p) for p in it.permutations('Mick'))
>>> print res
['Mick', 'Mikc', 'Mcik', 'Mcki', 'Mkic', 'Mkci', 'iMck', 'iMkc', 'icMk', 'ickM', 'ikMc', 'ikcM', 'cMik', 'cMki', 'ciMk', 'cikM', 'ckMi', 'ckiM', 'kMic', 'kMci', 'kiMc', 'kicM', 'kcMi', 'kciM']
于 2016-01-02T14:36:19.663 回答