我試圖建立一個播放草稿/跳棋的程序。目前我正在嘗試製作這個功能,它允許電腦製作和評估動作。我的想法是讓電腦看看它自己可能發生的所有動作,並且對於每一個動作,看看可能的對手動作,然後對每一個動作再次看看它自己可能的動作。跳棋算法:如何減少嵌套for循環
每一層都會評估這個移動對於玩家來說是好還是不好,並且分配點,最後它會選擇最高點的移動。
到目前爲止,我已經設法得到這個工作的一個版本,但涉及很多嵌套for循環。代碼是一團糟,並且目前不太可讀,但這是一個相同概念的簡單模型。而不是評估和生產更多的清單,它只是爲新清單乘以2。
counter = 0
for x in list:
counter += 1
list_2 = [x * 2 for x in list]
print 'list_2', list_2, counter
for x in list_2:
counter += 1
list_3 = [x * 2 for x in list_2]
print 'list_3',list_3, counter
for x in list_3:
counter += 1
list_4 = [x * 2 for x in list_3]
print 'list_4', list_4, counter
如果我運行此代碼,我得到我想要的東西,但我不能輕鬆地控制搜索的深度沒有更多的複製for循環。我認爲遞歸可能是這樣做的一種方式,但我無法弄清楚如何在x級搜索深度後停止遞歸。
有沒有更好的方式獲得相同的輸出形式上面的代碼,同時擺脫所有for循環?如果我能做到這一點,我想我可以自己完成剩下的工作。
如果這可能會更簡單,你可以使用棧來代替遞歸。同樣使用[Alpha-Beta](http://gamedev.stackexchange.com/a/30033)遊戲樹搜索和理解它可能會幫助您創建算法。 – Kupiakos
如果您需要遞歸任意次數,請將該數字作爲遞歸函數的參數。如果它是0,那是你的基本情況。 – JETM
你可以用遞歸來做到這一點。看看這個[回答](http://stackoverflow.com/a/36645766/4014959)看看如何限制遞歸深度。但是,您還需要限制遞歸幅度,或者要評估的董事會數量很快就會變大;這就是alpha-beta修剪很有用的地方。 –