Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用递归方法编程计算n个元素和k个群的群数_Java_Recursion - Fatal编程技术网

Java 用递归方法编程计算n个元素和k个群的群数

Java 用递归方法编程计算n个元素和k个群的群数,java,recursion,Java,Recursion,前提条件:0

前提条件:0 我认为没有办法把它分解成更小的子问题,因为一旦你这样做了,你就开始两次计算可能性

事实并非如此。创建第一个组后,第一个组中的项目将不再在候选项目集中,子问题将变成计算剩余项目的所有可能分组-这与原始问题(计算一组项目的所有可能分组)并不一致

因此,您的问题归结为必须计算单个组中所有可能的项目排列(例如a、ab、ac、bc、abc),然后对其中的每一个项目,以类似的方式处理剩余的项目

一旦您能够确定具有N个可用对象的单个组的置换数量,最终结果是该数量加上,对于每个置换,不包括已分组项的组的置换数量(N减去组大小)。以此类推,直到达到基本情况,即0个项目的分组数为0

如果您可以确定如何找到N个对象的置换数(置换不必包括每个对象),那么您已经解决了这个问题

    public static int groups (int n, int k){
    if(n==k){
        return n;
    }else if(n>1 && k==1){
        return 1;
    }else return n*groups(n-1, k-1);
}