2015-11-25 59 views
0

這隻能走向東方和南方。例如,東1塊,南2塊,則它的總路徑方式爲: 1塊東,2塊南, 1塊東,然後2塊南南 1塊南,然後1塊東,然後向南1個街區 向南2個街區,然後向東1個街區Java遞歸方法計算街道的路徑

如何向東6個街區,向南6個街區。

我的代碼是:

public class Path{ 
    public static int numPaths(int east, int south){ 

     if((east==1)&&(south==1)){ 
      return 2; 
     } 
     if ((east==1)&&(south==2)){ 
      return 3; 
     } 
     else{ 
     return (numPaths(east,south-1)+numPaths(south-1,east)); 
     } 

    } 
    public static void main(String[] args) { 
     System.out.println(numPaths(6,6)); 
    } 
} 

(然而,這是不行的,它抱怨我的代碼在方法的最後一行,我只是不知道如何解決它。) 我想知道原因,而不是答案。

+0

請重新格式化代碼以獲得更好的可讀性和附加錯誤消息。 – maxhb

+0

@maxhb感謝,錯誤的是:異常在線程 「主要」 java.lang.StackOverflowError的 \t在Path.numPaths(Path.java:12) \t在Path.numPaths(Path.java:12) –

回答

1

首先,您確實應該使用else if將您的if連在一起。

然而,真正的問題是,你沒有任何檢查,確保值永遠不會低於1.因此,你可以獲得無限遞歸與越來越小的值。

添加if塊檢查此:

if ((east==1) && (south==1)){ 
    return 2; 
} else if ((east==1) && (south==2)){ 
    return 3; 
} else if ((east==0) || (south==0)) { 
    return 0; 
} else { 
    return (numPaths(east,south-1)+numPaths(south-1,east)); 
} 
+0

精彩! (Y)它打印出378! (Y) –

+0

OH MY GOD!原因是我沒有添加ZERO !!!! –

+0

@Keppil:神祕測試案例失敗 –

0

例外:java.lang.StackOverflowError的 \

哪裏是遞歸的尾部。我的意思是我沒有發現遞歸結束於任何地方。這 if(east == 0 || south ==0){return value;}是必需的