题目:备忘录方法完成二项式公式计算,即Ckn=Ck−1n−1+Ckn−1Cnk=Cn−1k−1+Cn−1k. 公式解释:为了从n个不同元素中抓取k个元素(CknCnk),可以这样考虑,如果第一个元素一定在结果中,那么就需要从剩下的n-1个元素中抓取k-1个元素(Ck−1n−1Cn−1k−1);如果第一个元素不在结果中,就需要从剩下的n-1个元素中抓取k个元素(Ckn−1Cn−1k)。
这题思想其实已经给出来了,废话不多说,先贴代码:
public int getBinomial(int k,int n){
int value;
if(k==0||k==n){
value = 1;
}else if(binomial[n][k]!=0){//判断是否已经运算过。
value = binomial[n][k];
}else{
value = getBinomial(k-1,n-1)+getBinomial(k,n-1);
}
binomial[n][k] = value;
return binomial[n][k];
}
其中binomial数组被预先设为0,用来判断是否已经参与运算。
使用备忘录的好处是很明显的,当数据过大,它能减少大量的运算。