と の 2 つの機能がprod
ありperm
ます。それらは非常に似ています.どちらも再帰を使用しています.今、再帰をforループに置き換えたくありません. prod2
正しく動作しましたが、perm2
そうではありません。どうすれば修正できますか?
#Recursive version:
def prod(A,k):
return [[]] if k==0 else [[a]+b for a in A for b in prod(A,k-1)]
def perm(A,k):
return [[]] if k==0 else [[a]+b for a in A for b in perm([i for i in A if i!=a],k-1)]
#NonRecursive version:
def prod2(A,k):
r=[[]]
for i in range(k):
r=[[a]+b for a in A for b in r]
return r
def perm2(A,k):
r=[[]]
for i in range(k):
r=[[a]+b for a in A for b in [i for i in r if i!=a ] ]
return r
print prod([1,2,3],2)
print prod2([1,2,3],2)
print perm([1,2,3],2)
print perm2([1,2,3],2)