【发布时间】:2014-02-09 06:40:03
【问题描述】:
因此,使用 itertools 模块,我可以编写一段非常巧妙的代码来生成所有置换置换,但我想做的是使用递归。
这是我想出的:
def permutations_with_replacement(n,k,permutations):
m = 0
if k < 1:
return permutations
for i in range(27):
permutations[i].append(m % n)
if (i % n**(k-1)) == n**(k-1) - 1:
m = m + 1
return permutations_with_replacement(n,k-1,permutations)
n = 3
k = 3
permutations = [[] for i in range(n**k)]
print permutations_with_replacement(n,k,permutations)
基本上,它有点像放置每个排列的第一层(条目),然后在每次后续迭代中,它会越来越快地运行 0...n-1 以获得所有组合。我举了一个 n=k=3 的例子,因为我必须初始化排列列表并在函数内部初始化它会导致递归时搞砸了。我还为范围输入了 27 而不是 n^k,因为 n^k 在递归时也会被搞砸。怎样才能让它干净地工作?
我真正想做的是做一个递归,它基本上用替换替换了产生所有排列的嵌套for循环方法,我的理解是递归解决了嵌套for循环方法需要知道深度的问题先验的嵌套for循环。所以如果有人能告诉我如何做到这一点,那也很好,谢谢。
【问题讨论】:
标签: python algorithm recursion permutation