Variablenänderung unerwartet bei Rekursion?
Ich versuche gerade Reddit/ r / dailyprogrammer Herausforderung.
Die Idee ist, eine Lösung für ein ASCII-Labyrinth zu finden. Leider funktioniert die Rekursion anders als ich erwartet hatte. Das Programm prüft, ob Platz zum Verschieben nach rechts, links, unter oder über dem aktuellen Platz vorhanden ist. Ist dies der Fall, wird das Leerzeichen verschoben und die Funktion mit neuen Koordinaten erneut eingegeben. Dies geht so lange weiter, bis das Ende gefunden ist.
Wenn das Ende gefunden ist, wird das Programm beendet. Wenn eine Sackgasse gefunden wird, wird die Rekursion auf den vorherigen Punkt zurückgesetzt und nach weiteren Richtungen gesucht. Dies wird bis zum Ende fortgesetzt.
ProblemMein Programm funktioniert gut, aber das Labyrinth zeichnet meine Linien (dargestellt durch '*****'), auch nachdem die Rekursion gesichert wurde. Ich weiß nicht, wie ich das erklären soll, deshalb benutze ich Bilder, um eine bessere Beschreibung zu geben.
Jede neue Farbe repräsentiert einen neuen Pfad. Allerdings hätte ich erwartet, dass nur der aktuelle Rekursionspfad angezeigt wird. In diesem Fall würde ich beispielsweise erwarten, dass nur der gelbe Pfad angezeigt wird. Kann mir jemand helfen zu verstehen, warum alle Pfade bleiben?
Der Codeimport time
import sys
import os
maze = """\
###############
#S # #
### ### ### # #
# # # # #
# ##### ##### #
# # # #
# ### # ### ###
# # # # # #
# # ### # ### #
# # # # # # #
### # # # # # #
# # # # # #
# ####### # # #
# #E#
###############"""
def displayMaze(maze):
os.system("cls")
display = ""
for x in maze:
for y in x:
display = display + y
display = display + "\n"
print(display)
def findStart(maze):
#Get the maze start co-ords.
for x in range(0,len(maze[0])):
for y in range(0,len(maze)):
if maze[x][y] == "S":
return x,y
def findPath(x,y,maze):
#Look right, left, up and down, If path then move.
time.sleep(0)
if maze[y][x+1] == " ":
newMaze = maze
newMaze[y][x+1] = "*"
displayMaze(newMaze)
findPath(x+1,y,newMaze)
elif maze[y][x+1] == "E":
sys.exit("Done")
if maze[y][x-1] == " ":
newMaze = maze
newMaze[y][x-1] = "*"
displayMaze(newMaze)
findPath(x-1,y,newMaze)
elif maze[y][x-1] == "E":
sys.exit("Done")
if maze[y+1][x] == " ":
newMaze = maze
newMaze[y+1][x] = "*"
displayMaze(newMaze)
findPath(x,y+1,newMaze)
elif maze[y+1][x] == "E":
sys.exit("Done")
if maze[y-1][x] == " ":
newMaze = maze
newMaze[y-1][x] = "*"
displayMaze(newMaze)
findPath(x,y-1,newMaze)
elif maze[y-1][x] == "E":
sys.exit("Done")
if __name__ == "__main__":
maze = maze.split("\n")
newMaze = []
for line in maze:
newMaze.append(list(line))
x,y = findStart(newMaze)
findPath(x,y,newMaze)