首页 > 解决方案 > 二项式系数数组

问题描述

所以,我已经实现了二项式系数

public static int binomial(int n, int k) {
    if (k == 0)
        return 1;
    else if (k > n - k)
        return binomial(n, n - k);
    else
        return binomial(n - 1, k - 1) * n / k;
}

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    System.out.println("Insert n: ");
    int n = scan.nextInt();

    System.out.println("Insert k: ");
    int k = scan.nextInt();

    System.out.println("Result: " + binomial(n, k));
}

它有效,但我卡住的地方只是我需要为两个给定数字添加系数数组。所以如果n5k3。系数数组将显示:1 5 10 10。有任何想法吗?

标签: javaarrayspascals-trianglebinomial-coefficients

解决方案


不要在 for 循环中调用递归代码。这增加了愚蠢的冗余。

将数组作为参数从 main 传递给递归函数。数组在java中通过引用传递。

public static int binomial(int n, int k, int[] coefficient) {
    int ret;
    if (k == 0) {
        ret = 1;
    } else if (k > n - k) {
        ret = binomial(n, n - k, coefficient);
    } else {
        ret = binomial(n - 1, k - 1, coefficient) * n / k;
    }
    coefficient[k] = ret;
    return ret;
}

推荐阅读