2013-03-14 88 views
1

我應該使用遞歸來輸出從點A到點B的唯一東北路徑ne(x,y)的總數,其中B是x行北和東列的y列。另外,我需要打印可能的唯一網元路徑。執行遞歸的東北路徑時遇到困難

我知道如何使用遞歸來獲取唯一路徑的總數。但是,我堅持使用遞歸來正確打印所有網元路徑。

這是一些測試情況下,給定輸出: image of output

my faulty recursive code

不管怎麼說,這是我的錯誤遞歸代碼的屏幕截圖。 請給我建議,哪裏出錯了。我在這方面耗費了大量時間,但仍然無法達成解決方案。

回答

2
  1. 我想你應該打印如果(行== 0 & &的cols == 0),因爲它是當你爲什麼要使用路徑+ =「N」到達B點
  2. 的情況下在第一個ne電話回報?這將在原路徑中添加「N」,然後在第二次調用中獲得路徑+「N」+「E」。

嘗試以下操作:

public static int ne(int rows, int cols, String path) 
{ 
    if(rows == 0 && cols == 0) 
    { 
     System.out.println(path); 
     return 1; 
    } 
    int npats = 0, wpaths = 0; 
    if(rows != 0) 
     npaths = ne(rows-1, cols, path+"N"); 
    if(cols != 0) 
     wpaths = ne(rows, cols-1, path+"E"); 
    return npaths + wpaths; 
} 
+0

非常感謝。有效。但我完全無法理解代碼。爲什麼我們不得不將代碼分解成兩種情況:if(rows!= 0)和if(cols!= 0)? – uohzxela 2013-03-14 18:15:09

+0

如果rows == 0調用行-1將是不必要的(並且不正確,意味着rows = -1 ??) - 我們已經到達了目標座標,現在我們只需要向其他方向移動 – 2013-03-14 18:41:00