在Java中使用递归计算数组中大小k的组合总数?

在Java中使用递归计算数组中大小k的组合总数?,java,recursion,combinations,Java,Recursion,Combinations,我试图编写一个递归方法,计算整数数组中k个大小的组合数 对于已知值k(例如3),我可以很容易地这样做,如下所示: int[]arr={1,2,3,4}; 整数计数=0; 对于(int i=0;i

我试图编写一个递归方法,计算整数数组中k个大小的组合数

对于已知值k(例如3),我可以很容易地这样做,如下所示:

int[]arr={1,2,3,4};
整数计数=0;
对于(int i=0;i
然而,我希望能够做到这一点,没有已知的k。我在网上找到了使用递归打印组合的方法,例如:
,但不计算它们。

修改链接方法的简单示例

public static int recur(int[] A, int i, int k)
{
    int count = 0;

    if (k == 0) {
        count++;
    }

    for (int j = i; j < A.length; j++) {
        count = count + recur(A, j + 1, k - 1);
    }
    return count;
}
public static int recur(int[]A,int i,int k)
{
整数计数=0;
如果(k==0){
计数++;
}
对于(int j=i;j
为什么要进行向下投票?您可以使用n^k直接计算它们,其中n是数组中的元素数,k是您所需的大小。您不需要递归,只需计算
n/K(n-k)
如果您需要使用递归的解决方案,那么为什么不使用链接的解决方案并增加计数器参数而不是打印?我知道我不必这样做,但我想编写一个使用递归的方法,我会将
count++
更改为
return 1。虽然它不会影响结果,但可以使用负值k节省不必要的递归调用。您也可以现在停止传入数组,只传入长度,因为该方法不处理数组的内容。
public static int recur(int[] A, int i, int k)
{
    int count = 0;

    if (k == 0) {
        count++;
    }

    for (int j = i; j < A.length; j++) {
        count = count + recur(A, j + 1, k - 1);
    }
    return count;
}