Variablenänderung unerwartet bei Rekursion?

Kontext

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.

Problem

Mein 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 Code
import 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)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage