<p>如果你想知道递归函数内部发生了什么,你可以添加外部函数作为参数,然后你可以在递归内部使用它来打印算法的当前状态或在棋盘上画皇后。在</p>
<p>在示例中,我使用<code>show_colums()</code>在每次<code>self.place()</code>运行时打印<code>self.columns</code>。在</p>
<p>文件:不合格品在</p>
<pre><code>class NQ:
def __init__(self,n, callback): # added callback
self.size = n
self.columns = []
self.places = 0
self.backtracks = 0
self.callback = callback # added callback
def place(self, startRow=0):
self.callback(self.columns) # added callback
if len(self.columns) == self.size:
return self.columns
else:
for row in range(startRow, self.size):
if self.isSafe(len(self.columns), row) is True:
self.columns.append(row)
self.places += 1
return self.place()
else:
lastRow = self.columns.pop()
self.backtracks += 1
return self.place(startRow=lastRow + 1)
def isSafe(self, col, row):
for threatRow in self.columns:
threatCol = self.columns.index(threatRow)
if row == threatRow or col == self.columns.index(threatRow):
return False
elif threatRow + threatCol == row + col or threatRow - threatCol == row - col:
return False
return True
</code></pre>
<p>文件:主.py在</p>
^{pr2}$
<p>部分结果</p>
<pre><code>columns: []
columns: [0]
columns: [0, 2]
columns: [0, 2, 4]
columns: [0, 2, 4, 1]
columns: [0, 2, 4, 1, 3]
columns: [0, 2, 4, 1]
columns: [0, 2, 4, 1, 7]
columns: [0, 2, 4, 1]
</code></pre>