本論文では、迷路のPython再帰的なアルゴリズムが実装された問題の例を示します。以下のように、ご参考のためにあなたに共有します:
再帰とは何ですか?
理解することは、単純なプロセスは、再帰と呼ばれている自分自身を呼び出す関数です。
再帰を使用する場合は?
問題は、反復小さい規模として表現することができる場合は、再帰的なアルゴリズムを使用することができます。
迷路:0または1からなる二次元アレイは、1点に移動すると仮定され、それは0点に移動することはできませんであり、どのようにのみ上下それぞれ、中間の配列値が1である点から進行します二次元アレイの端部に移動するとき、問題の解決策を得ることができるユニットを、移動四方は、同様の問題が迷路と呼ぶことができます。
あなたは、ネストされたリストは、Pythonで2次元配列を表して使用することができます。[3] [3] * 6 6を開始迷路を想定すると、配列座標からの質問は、迷路の成功を判断することはできません。
maze=[[1,0,0,1,0,1],
[1,1,1,0,1,0],
[0,0,1,0,1,0],
[0,1,1,1,0,0],
[0,0,0,1,0,0],
[1,0,0,0,0,0]]
この迷路のために、我々は、再帰的な優れたソリューションのアイデアを使用することができます。ドットアレイのために、ポイントの4方向を容易に全体の問題は、初期状態として問題となっており、水平および垂直座標を加算又は減算することにより、検索が継続移動させるために、時間のたびに可動点を表すことができます。四方をポイントを見つけるために移動することができ、既知の配列の端部に移動します。
我々はコーディングできそう。
# 判断坐标的有效性,如果超出数组边界或是不满足值为1的条件,说明该点无效返回False,否则返回True。
def valid(maze,x,y):
if (x>=0 and x<len(maze) and y>=0 and y<len(maze[0]) and maze[x][y]==1):
return True
else:
return False
# 移步函数实现
def walk(maze,x,y):
# 如果位置是迷宫的出口,说明成功走出迷宫
if(x==0 and y==0):
print("successful!")
return True
# 递归主体实现
if valid(maze,x,y):
# print(x,y)
maze[x][y]=2 # 做标记,防止折回
# 针对四个方向依次试探,如果失败,撤销一步
if not walk(maze,x-1,y):
maze[x][y]=1
elif not walk(maze,x,y-1):
maze[x][y]=1
elif not walk(maze,x+1,y):
maze[x][y]=1
elif not walk(maze,x,y+1):
maze[x][y]=1
else:
return False # 无路可走说明,没有解
return True
walk(maze,3,3)
再帰は良いことああです!
、そして最終的に公共機関[プログラマ]の数では良い評判をお勧めする方法多くのより多くのコンテンツ、古いタイマー、スキルを学習体験、インタビューのスキル、職場体験や他のシェアを学習がたくさんある、より多くの我々は慎重に準備ゼロベース実際のプロジェクトデータの入門情報、毎日、細部に学習し、注意を払う必要性にする方法のいくつかを共有するために、Pythonのプログラマの技術のタイミングを説明するために、私は注意を覚えています