0
我有兩個函數,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)
在另一方面,如果你想要做的排列和產品在Python,而不是僅僅FPGA實現他們提高自己的技能,迭代工具模塊是前進的方向。 – rlms
你的遞歸'perm'也是錯誤的。僅適用於'k = 2'。 – Igonato
@Igonato謝謝,更新。 – mathe