2017-03-09 49 views
0

我想通過給方法提供行號和列號來找出Pascal三角形的正確數字。Pascal的三角Java實現

我發現這段代碼:

public static int getPascalValue(int row, int column) { 
    if (column == 0 || column == row) { 
     return 1; 
    } 
    return getPascalValue(row - 1, column - 1) + getPascalValue(row - 1, column); 
} 

public static void main(String args[]) { 
    System.out.println("\r\n"+getPascalValue(3,2)); 
} 

這似乎是正確的我,但給出了錯誤的號碼。

例如主要應導致2號,但它給了我3,因爲:

1 
    1 1 
    1 2 1 
1 3 3 1 

我想不出錯遞歸的一部分,任何人可以幫助我嗎?

謝謝!

+5

也許你只是困惑於它是基於零還是基於一個? –

+0

只需將'if'更改爲'column == 1',以使輸入1爲基礎。 – 4castle

+1

正如我確信您知道的那樣,我們是一個問答網站,而不是編碼人員出租服務。請解釋你到目前爲止嘗試過的以及爲什麼它沒有奏效。請參閱:[爲什麼「有人可以幫助我?」不是一個實際的問題?](http://meta.stackoverflow.com/q/284236)和[當我不確定我在找什麼時問一個好問題?](https:// meta。 stackoverflow.com/questions/262527/how-to-ask-a-good-question-when-im-not-sure-what-im-looking-for) –

回答

2

這不是關於遞歸部分或關於getPascalValue()方法本身(本身):它是關於基於0的索引和基於1的索引之間的差異。該代碼被寫成假定基於0的索引,即三角形的頂部在(0,0);但你似乎預計1基指數在這種情況下頂部將在(1,1)

main()調用來自外部,即getPascalValue()方法時,簡單地糾正這個做:

int row = 3, column = 2; 
System.out.println("\r\n"+getPascalValue(row - 1, column - 1)); 
1

我回答自己:

public static int getPascalValue(int row, int column) { 
    if(column == 0) 
     return 0; 
    if ( column == row) { 
     System.out.println("result di row: " + row +" column: "+ column + " = 1"); 
     return 1; 
    } 
    int result = getPascalValue(row - 1, column - 1) + getPascalValue(row - 1, column); 
    System.out.println("result di row: " + row +" column: "+ column + " = "+ result); 
    return result;//getPascalValue(row - 1, column - 1) + getPascalValue(row - 1, column); 
} 

的演算錯了,因爲我想在不操縱方法的情況下給出答案。 訣竅在於專欄。現在工作。