如何在java中计算组合?通过使用回忆录?

如何在java中计算组合?通过使用回忆录?,java,recursion,memoization,Java,Recursion,Memoization,我自己也在学习JAVA,现在我正在学习记忆。但我有点迷路了 有没有人有一些关于如何在Java中通过使用递归和使用记忆来加速算法来计算组合的示例代码 比如计算C5,3=5*4*3/3*2*1=10的方法?但是使用递归?您可以使用此处免费提供的组合库: 让我们用一个例子20选择5 由于20,选择5被定义为20!/(5!*(20-5)!) 我们可以使用memorization来存储这些阶乘计算,这样我们就不必在递归下不断地重新计算它们 因此: //存储阶乘计算 私有映射factorialMap=new

我自己也在学习JAVA,现在我正在学习记忆。但我有点迷路了

有没有人有一些关于如何在Java中通过使用递归和使用记忆来加速算法来计算组合的示例代码


比如计算C5,3=5*4*3/3*2*1=10的方法?但是使用递归?

您可以使用此处免费提供的
组合库


让我们用一个例子20选择5

由于
20,选择5
被定义为
20!/(5!*(20-5)!)

我们可以使用
memorization
来存储这些阶乘计算,这样我们就不必在递归下不断地重新计算它们

因此:

//存储阶乘计算
私有映射factorialMap=newhashmap();
公共长getFactorial(整数){
//检查我是否已经计算了这个阶乘
Long val=factorialMap.get(数字);
如果(val!=null){
//明白了!
返回val;
}否则{
//需要计算!
val=getFactorialRecursive(数字);
//存储它以保存计算供以后使用
因子平均投入(数值,val);
返回val;
}
}
//计算阶乘的递归函数
公共长getFactorialRecursive(整数){
如果(数字<2){
返回1L;
}否则{
返回编号*getFactorialRecursive(编号-1);
}
}
//实际调用“20选择5”
公共长组合(int-fromVal、int-chooseVal){
返回getFactorial(fromVal)/(getFactorial(chooseVal)*getFactorial(fromVal chooseVal));
}

张贴代码,显示您尝试过的内容,以及具体遇到的问题。问题太广泛了。也许你最好搜索一下二项式系数。这是代码,谢谢你的帮助。我能理解,但我对java真的很陌生。我实际上不能运行你的代码…它不是指运行代码,而是一个example@jackhao我把它放在pastebin上了,谢谢。你们真是太好了。非常感谢你。
    //STORING FACTORIAL COMPUTATIONS
    private Map<Integer,Long> factorialMap = new HashMap<Integer,Long>();


    public Long getFactorial(int number) {

        //CHECK IF I ALREADY COMPUTED THIS FACTORIAL
        Long val = factorialMap.get(number);
        if(val != null) {
            //GOT IT!
            return val;
        } else {
            //NEED TO COMPUTE!
            val = getFactorialRecursive(number);
            //STORING IT TO SAVE COMPUTATION FOR LATER
            factorialMap.put(number, val);
            return val;
        }
    }

    //RECURSIVE FUNCTION TO COMPUTE FACTORIAL
    public Long getFactorialRecursive(int number) {
        if(number < 2) {
            return 1L;
        } else {
            return number * getFactorialRecursive(number-1);
        }
    }


    //ACTUAL CALL TO "20 choose 5"
    public Long combination(int fromVal, int chooseVal) {
        return getFactorial(fromVal)/(getFactorial(chooseVal)*getFactorial(fromVal-chooseVal));
    }