我認爲我的代碼沒有問題,但是當我開始更改值時,最終導致了遞歸問題。我以爲我修好了它,但是當我看到結果時,他們都是錯的。當我保持遞歸時,結果很好。修復Python遞歸會導致錯誤的結果
我使用了一個while循環來嘗試修復遞歸問題,而不是遞歸調用spread方法,而是返回值傳遞給propagate方法,並返回False,如果它不通過值。所以,只要該方法保持返回值,它應該重新運行傳播方法和前一次運行的結果。
此代碼的工作,直到它打破遞歸限制:
def spread(self, position):
for direction in self._directions:
(x, y) = self.changePosition(position, direction)
if self.canInfectMatrix[x][y] and not self.contactMatrix[x][y]:
self.contactMatrix[x][y] = True
self.spread([x,y])
# return [x,y]
# return False
def propagate(self):
# initialize canInfectMatrix and contactMatrix
self.contactMatrix = [[False for row in range(self.cardinalWidth)] for col in range(self.cardinalWidth)]
self.canInfectMatrix = [[False for row in range(self.cardinalWidth)] for col in range(self.cardinalWidth)]
for col in range(self.cardinalWidth):
for row in range(self.cardinalWidth):
self.canInfectMatrix[row][col] = self.getsInfected(self._matrix[col][row])
# Spread infection.
for x in range(self.cardinalWidth):
for y in range(self.cardinalWidth):
if self._matrix[x][y] == "infected":
self.spread([x,y])
# position = [x,y]
# while position:
# position = self.spread(position)
下面的代碼無法正常工作,但我沒有得到任何錯誤:
def spread(self, position):
for direction in self._directions:
(x, y) = self.changePosition(position, direction)
if self.canInfectMatrix[x][y] and not self.contactMatrix[x][y]:
self.contactMatrix[x][y] = True
# self.spread([x,y])
return [x,y]
return False
def propagate(self):
# initialize canInfectMatrix and contactMatrix
self.contactMatrix = [[False for row in range(self.cardinalWidth)] for col in range(self.cardinalWidth)]
self.canInfectMatrix = [[False for row in range(self.cardinalWidth)] for col in range(self.cardinalWidth)]
for col in range(self.cardinalWidth):
for row in range(self.cardinalWidth):
self.canInfectMatrix[row][col] = self.getsInfected(self._matrix[col][row])
# Spread infection.
for x in range(self.cardinalWidth):
for y in range(self.cardinalWidth):
if self._matrix[x][y] == "infected":
# self.spread([x,y])
position = [x,y]
while position:
position = self.spread(position)
注意在註釋中的變化每種方法的底部
據我所知,這些都應該可以幫助是一樣的東西,但他們沒有。一個很好,直到我得到遞歸極限錯誤。另一個根本不起作用,但我沒有發生遞歸錯誤。
這些爲什麼會返回不同的值?
甜。謝謝。這恰恰是錯誤的,你的解決方案非常合理。 – 2013-05-06 12:28:22