次のような Python (バージョン 3.2) の 2D 配列があります。
...AAA....
...AAABB..
..BBBBBCC.
.....CCCC.
.DDD..CC..
.DDD......
これは、さまざまな色で塗りつぶされた領域を持つ一種の地図を表しています。上記の例は、A、B、C、および D の 4 つの異なる領域を示しています。
配列のインデックス付けの例を次に示します。 map[1][5] == 'A' は True を返します。
このような配列と行/列のインデックスを取り、同じ「色」の隣接するスペースの数を返す関数を作成しようとしています。上記の例を使用して、ここにいくつかの戻り値があります (引数はそれぞれ配列、行、および列番号です:
6 <-- countArea(map, 5, 2)
8 <-- countArea(map, 2, 8)
これを再帰関数として実装したいのですが、わかりません。これが私がこれまでに持っているものです:
def countArea(map, row, col):
key = map[row][col]
if (map[row-1][col] == key):
return 1 + countArea(map, row-1, col)
elif (map[row+1][col] == key):
return 1 + countArea(map, row+1, col)
elif (map[row][col+1] == key):
return 1 + countArea(map, row, col+1)
elif (map[row][col-1] == key):
return 1 + countArea(map, row, col-1)
else:
return 1
ここで基本的なものが欠けていることはわかっています。私は基本的に、「これが現在のキャラクターです。各方向を見て、同じキャラクターかどうかを確認してください」と言っています。
私の質問は、この再帰的な定義に欠けているものは何ですか?
ご協力いただきありがとうございます。