组合数的两种计算方法(递推,对数) 您所在的位置:网站首页 取对数公式 组合数的两种计算方法(递推,对数)

组合数的两种计算方法(递推,对数)

2024-07-10 23:41| 来源: 网络整理| 查看: 265

https://blog.csdn.net/sxh759151483/article/details/78161232

组合数

       从m个不同元素中,任取n(n≤m)个元素并成一组,叫做从m个不同元素中取出n个元素的一个组合;所有可能的组合种数就是组合数。组合数的计算公式如下图:

式子中出现了阶乘,而20!=2.4329020081766 * 1018    

这个数字已经和long long能表示的最大整数一个数量级了,而式子是个除式,所以要想办法在过程中把数降下来。

 

 

方法一:想到一个组合数公式:

c(m,n)=c(m-1,n-1)+c(m-1,n)

这个式子可以这样记忆:你从m个元素里挑n个元素,针对第一个元素要么是n个里的要么不是,如果是的,那么就从剩下的m-1个里挑n-1个 就是c(m-1,n-1);如果第一个元素不是n里的,就从剩下的m-1个元素里挑n个,就是c(m-1,n)。

利用这个公式,就能用递归的方法解决问题。注意递归的结束条件。

代码示例:

#include #include using namespace std; long long comb(int m,int n) { if(n==0) return 1; if(n==1) return m; if(n>m/2) return comb(m,m-n); if(n>1) return (comb(m-1,n-1)+comb(m-1,n)); } int main() { int m,n; while(cin>>m>>n) cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有