Python 中 for 循环中递归的可视化
visualisation of recursion in a for loop in Python
我无法为以下排列代码绘制递归树:
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 and ick
kc 和 ick
吃喝玩乐
我理解它直到 'k' 和 'ck'(当 array = 'ck' len(arraw[1:]) == 1 时)但是我们如何得到 'ick' 作为递归中的数组?
你能想象一下吗?非常感谢任何提示!
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']
我无法为以下排列代码绘制递归树:
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 and ick
kc 和 ick
吃喝玩乐
我理解它直到 'k' 和 'ck'(当 array = 'ck' len(arraw[1:]) == 1 时)但是我们如何得到 'ick' 作为递归中的数组? 你能想象一下吗?非常感谢任何提示!
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']