21xrx.com
2024-12-23 00:17:21 Monday
登录
文章检索 我的文章 写文章
C++递归计算组合数
2023-06-29 08:02:58 深夜i     --     --
C++ 递归 计算 组合数 编程

组合数是数学中一个重要的概念,是在给定的集合中选出若干个元素,不考虑它们的排列顺序,所能形成的不同组合方式的总数。可以用以下公式计算组合数:

nCk = n! / (k! * (n-k)!)

其中n为总数,k为选取的元素个数,!表示阶乘。

而在C++中,可以使用递归的方式来计算组合数,代码如下:


#include <iostream>

using namespace std;

int combination(int n, int k){

  if(k==0 || k==n) return 1; //基本情形

  else return combination(n-1,k) + combination(n-1,k-1); //递归公式

}

int main(){

  int n = 5, k = 2;

  cout << n << "C" << k << " = " << combination(n,k) << endl;

  return 0;

}

在该代码中,计算组合数的函数combination采用递归的方式。当选取的元素个数为0或者为n时,表示已经选出了所有元素或者没有元素可选,则返回1作为基本情形。当选取的元素个数为其他值时,则采用公式:

nCk = (n-1)Ck + (n-1)C(k-1)

在递归中计算组合数,直到达到基本情形为止。

使用递归计算组合数的方法简单、便捷,适合计算较小的组合数。而对于大数计算,递归的效率可能较低,需要采用其他方法优化计算速度。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复