2017-03-09 51 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); 
} 

的演算错了,因为我想在不操纵方法的情况下给出答案。 诀窍在于专栏。现在工作。