我遇到了遞歸Java程序的問題,目前的問題是我不明白爲什麼基本case1如果正在執行。在初始方法調用findPath中,值2和0正在傳遞。 exitRow = 4和cols-1 = 11。所以,我的理解是這個基本情況不應該首先輸入if語句,因爲迷宮中的兩個位置[] []不一樣(迷宮[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;
}
也許基本情況1只在它應該執行時執行?你怎麼知道的? –
你永遠不會測試'O'標記。也許你應該;-) –
另外,「less is more」,所以用'if(findPath(row,col))'替換if(findPath(row,col)== true)' – Bohemian