这是来自https://wiki.python.org/moin/SimplePrograms的 8 个皇后问题的递归解决方案。我很难理解解决函数中的 return 语句如何/为什么起作用。乍一看,它似乎违反了规则(例如,解决方案尚未在 return 语句中的循环之前声明或分配值,但它出现在 return 语句中的循环之前)但我可以成功运行它,所以我好奇地想了解它是如何工作的,以及为什么有人可能会选择这样写(混淆?简短?因为我还不明白的其他限制?)
BOARD_SIZE = 8
def under_attack(col, queens):
left = right = col
for r, c in reversed(queens):
left, right = left - 1, right + 1
if c in (left, col, right):
return True
return False
def solve(n):
if n == 0:
return [[]]
smaller_solutions = solve(n - 1)
return [solution+[(n,i+1)]
for i in xrange(BOARD_SIZE)
for solution in smaller_solutions
if not under_attack(i+1, solution)]
for answer in solve(BOARD_SIZE):
print answer
我熟悉一些实验和我上过的课程的问题的递归解决方案,但我对 python 整体还是很陌生(我主要在课堂上和我自己使用过 java 和 C)。
有没有人有一个很好的方法来解释这种语法是如何工作的,或者我可以研究的其他例子可能有助于我理解它?这真的勾起了我的好奇心……