私は(0、0)から(x、y)までグリッドを移動するときにパスを保存するパラメータとして配列を持つ再帰関数を持っていますそして私は、私が最後にpath
をプリントアウトするように、このPython - 再帰関数への変数パスの範囲を理解してください
unAvailablePoint = [(1, 2), (3, 0), (0, 3), (2, 3), (0, 1)]
def steppable(point):
return point not in unAvailablePoint
def travel(x, y, path, visited):
if x >= 0 and y >= 0 and steppable((x, y)):
if (x, y) in visited:
return visited[(x, y)]
success = False
if (x, y) == (0, 0) or travel(x-1, y, path, visited) or travel(x, y-1, path, visited):
path = path + [(x, y)] #the path will remain empty even after the recursive call have done some changes to the path
success = True
visited[(x, y)] = success
return success
return False
path = []
visited = {}
travel(3, 3, path, visited)
print(path) //[]
のように「利用不可」
私は実装私の関数として定義されているいくつかのポイントをスキップする必要があり、path
はまだ空であるようです。これは私がPythonの初心者として期待したものではありません。
path.append((x,y)) #the path will remain empty even after the recursive call have done some changes to the path
代わりに:任意の提案は、パスに追加し、再帰の反復ごとにそれを初期化しないようにしてください役立つ
あなたの旅行関数は 'True' /' False'のみを返すので、 'path'の変更はその再帰ステップの範囲にとどまります。 – Fejs
これはJavaで異なります。これは、再帰的なステップが進むにつれてパラメータを変更できるようにします。それを追跡すると、呼び出し元は子の再帰的ステップに渡すパラメータの更新値を取得できるはずです。 –