我只是無法得到遞歸的竅門,尤其是對於複雜的示例。如果有人需要一些時間來解釋它,我會非常感激。我從字面上有4張紙滿了我追蹤這個功能,但我不知道如何把它放在一起。Java中的高級遞歸
public static String shortestPath(int x, int y, int tX, int tY,boolean blocked[][]) {
if(x>blocked.length-1 || y>blocked[0].length-1 || x<0 || y<0)
return null;
if(blocked[x][y]==true)
return null;
if(x==tX && y==tY)
return "";
String paths[]=new String[4];
blocked[x][y]=true; //this just means this coordinate is blocked, so dont use it
paths[0]=shortestPath(x, y+1, tX, tY, blocked);
paths[1]=shortestPath(x, y-1, tX, tY, blocked);
paths[2]=shortestPath(x+1, y, tX, tY, blocked);
paths[3]=shortestPath(x-1, y, tX, tY, blocked);
blocked[x][y] = false;
int result=findShortestString(paths, 0, 3);
//findShortestString just takes an array of strings,
//with 0 being the lo index and 3 being the hi,
//and returns the index that contains the string with the shortest length.
//5
if(paths[result]==null)
return null;
else{
if(result==0)
return 'N' + paths[result];
if(result==1)
return 'S' + paths[result];
if(result==2)
return 'E' + paths[result];
if(result==3)
return 'W' + paths[result];}
return paths[result];
所以這段代碼所做的是什麼,給定一個X和Y參數,它告訴你的移動最短的組合,你將不得不作出(NSWE爲北,南,西,東),以達到tX和tY參數。代碼完美地工作,但我不知道如何。
當我嘗試追蹤路徑[0]計算的路徑時,它總是會出現爲空,因爲y總是會一直增加,直到超出邊界,並返回空值。路徑[1] [2]和[3]的情況也是如此,它們都返回null,不是嗎?那麼,這個功能是如何工作的?
可能的重複[理解Java中的遞歸更好一點](http://stackoverflow.com/questions/4170207/understanding-recursion-in-java-a-little-better) – EJP 2010-11-13 08:50:07