我是一名正在研究这个家庭作业问题的学生。该代码试图找到任何给定圆形棋盘游戏的解决方案,其中列表作为参数给出。列表中的值告诉程序顺时针/逆时针移动多远(最后一个元素始终为 0)。
如果该特定难题有解决方案,则该程序旨在返回 True ,否则返回 False 。除了将 0 作为第一个也是唯一的元素的情况下,我的代码即使对于短列表也会返回 RecursionError。我的代码有什么问题?
def solve_puzzle(L): # uses helper for memoization
visited = set() # visited indices
return _solve_puzzle(L, visited, 0)
def _solve_puzzle(L, visited, index): # always start at first element
if L[index] not in visited:
visited.add(index)
if L[index] == 0:
return True
else:
# loop around to the end or start in python
if L[index] + index >= len(L):
new_index_add = index + L[index] - len(L)
else:
new_index_add = index + L[index]
if index - L[index] < 0:
new_index_sub = len(L) - L[index] - index
else:
new_index_sub = index - L[index]
# need to figure out the indexing - how do we go both backward and forward
return _solve_puzzle(L, visited, new_index_add) or _solve_puzzle(L, visited, new_index_sub) # True if it's solveable in either direction
return False