這是一個遞歸解決方案,來自https://wiki.python.org/moin/SimplePrograms的8個皇后問題。我很難理解如何/爲什麼解決函數中的return語句有效。乍一看,它看起來像違反了規則(比如,解決方案在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)。
有沒有人有一個很好的方式來解釋這個語法是如何工作的,或者我可以學習的其他例子可能會幫助我理解它?這真的讓我很好奇...
@DanielRoseman:這不是無效的語法。這是一個複雜的列表生成器內部 – justhalf
'返回'只是一個列表理解拆分爲多行,可能爲「可讀性」。 – Volatility
@justhalf是的,只是注意到了。 –