我已經寫在Python 2.7以下代碼找到N A組(AxAxA ... XA)的時間笛卡爾積 -問題與Python遞歸
prod=[]
def cartesian_product(set1,set2,n):
if n>=1:
for x in set1:
for y in set2:
prod.append('%s,%s'%(x,y))
#prod='[%s]' % ', '.join(map(str, prod))
#print prod
cartesian_product(set1,prod,n-1)
else:
print prod
n=raw_input("Number of times to roll: ")
events=["1","2","3","4","5","6"]
cartesian_product(events,events,1)
這正常工作當n = 1。但是從cartesian_product改變參數值(事件,事件1)到cartesian_product(事件,事件,2)不起作用。似乎有一個無限循環正在運行。我無法確定我在哪裏犯了一個錯誤。
當它第二次運行時,您將'prod'作爲'set2'傳遞。由於'prod'在函數之外定義,所以set2和prod現在是相同的東西。所以當你在set2和'prod.append'中執行'for y'時,你會附加到'set2',這會導致無限次的迭代。 – algrebe
提示:['itertools.product'](https://docs.python.org/3/library/itertools.html#itertools.product)可以完成這項工作(除非這是某種作業) – JBernardo
但是循環應該當n <1時停止。這意味着它應該在n = 2時精確運行2次@algrebe –