私は再帰的な Java プログラムで問題を抱えています。現在の問題は、ベースの case1 if が実行されている理由がわからないことです。findPath への最初のメソッド呼び出しでは、値 2 と 0 が渡されます。exitRow = 4 and cols-1 = 11. したがって、私の理解では、maze[][] の 2 つの場所が同じではないため (maze[4][11] ! =迷路[2][0])。しかし、それはまさにそれがしていることです。if 構造の理解で明らかに何かを見逃しているか、他の場所でエラーがあり、助けていただければ幸いです。
注:私も試しました
if (row == exitRow && col == cols-1)
しかし、これによりスタックオーバーフローが発生しました。そして、それについて私が理解していることはほとんどありませんが、それは、私の再帰が私を基本ケースに近づけていないか、それが書かれているために基本ケースに到達できないことを意味します。私が使用してきたこのガイドhttp://www.cs.bu.edu/teaching/alg/maze/に基づいて、再帰が正しいと仮定しています。これは、基本ケースが問題であると私に信じさせます。
どうもありがとう。
private Boolean findPath(int row, int col)
{
//base case 1
if (maze[exitRow][cols-1]==maze[row][col])
{
System.out.println("test");//for debugging
return true;
}
//base case 2
if (maze[row][col] == '#')
{
return false;
}
maze[row][col] = 'O';
System.out.println("test1");//for debugging
steps++;
//check north
if (findPath(row+1,col)==true )
{
return true;
}
//check east
if (findPath(row,col+1)==true )
{
System.out.println("test2");
return true;
}
//check south
if (findPath(row-1,col)== true)
{
return true;
}
//check west
if (findPath(row,col-1)== true)
{
return true;
}
System.out.println(steps);
maze[row][col] = '.';//unmark location
return false;
}