此方法将返回数组中(1 + x)^ n的扩展系数(即,将第(n + 1)行的Pascal三角形放入数组中。例如,假设c = PascalTriangle (n)。然后,c [i]是(1 + x)^ n扩展中x ^ i的系数。
到目前为止,我的代码如下:
static int[] pascalTriangle(int n)
{
int [] a = new int [n+1];
if(n == 0) {
a[0] = 1;
return a;
}
int[] s = pascalTriangle(n-1);
a[0] = a[n-1] = 1;
for(int i = 0; i < n-1; i++) {
a[i] = s[i-1] + s[i];
}
return a;
}
测试代码:
public static void testPascalTriangle()
{
for (int n = 0; n <= 30; n+=5) {
String str="(1+x)^"+n+":";
int[] c = Recursion.pascalTriangle(n);
for (int i = 0; i < c.length; i++)
str += " " + c[i];
System.out.println(str);
}
}
我的问题我相信是在我的代码中超过了第一个if语句,因为它输出:(1 + x)^ 0:1。然后我得到一个索引越界错误,我认为它没有达到a [0]行以及我需要它做的事情。
感谢您的帮助。
答案 0 :(得分:3)
AIOOBE发生在此代码段
中for (int i = 0; i < n - 1; i++) {
a[i] = s[i - 1] + s[i];
}
当i等于0时,它将尝试检索不是合法边界的s [-1]。
我相信,因为你要循环到i < n - 1
,你应该使用
a[i] = s[i] + s[i + 1];
然后你会得到输出
(1+x)^0: 1
(1+x)^5: 5 3 2 1 1 0
(1+x)^10: 55 34 21 13 8 5 3 2 1 1 0
(1+x)^15: 610 377 233 144 89 55 34 21 13 8 5 3 2 1 1 0
(1+x)^20: 6765 4181 2584 1597 987 610 377 233 144 89 55 34 21 13 8 5 3 2 1 1 0
(1+x)^25: 75025 46368 28657 17711 10946 6765 4181 2584 1597 987 610 377 233 144 89 55 34 21 13 8 5 3 2 1 1 0
(1+x)^30: 832040 514229 317811 196418 121393 75025 46368 28657 17711 10946 6765 4181 2584 1597 987 610 377 233 144 89 55 34 21 13 8 5 3 2 1 1