使用递归的Pascal Triangle Java练习返回数组中(1 + x)^ n的系数

时间:2015-04-01 22:58:31

标签: java arrays recursion

此方法将返回数组中(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]行以及我需要它做的事情。

感谢您的帮助。

1 个答案:

答案 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