Advertisement

使用递归法求解n选k的组合数

阅读量:

问题描述:

用递归法计算从n个人中选择k个人组成一个委员会的不同组合数。

分析:

n个元素中选取k个元素的方式总数等于从n−1个元素中选取k个元素的方式总数加上从n−1个元素中选取(k−1)个元素的方式总数。基于其自身的结构特点这一计算公式是典型的递归关系式;因此我们可以通过设计一个递归算法来实现这一计算逻辑。当满足(n=k)或者(k=0)时的情形就是该问题的基本终止情形;此时对应的组合数为C(n, k)=C(n, n−k)=C(n, 0)=C(0, 0)=1;接着就可以按照上述关系依次推导出所有情况

代码:

复制代码
    #include <iostream>
    using namespace std;
    
    int comm(int n,int k){
    	if(k>n)
    		return 0;
    	else if(k==n||k==0)
    		return 1;
    	else
    		return comm(n-1,k)+comm(n-1,k-1);
    }
    
    int main(){
    	int n,k;
    	cout<<"请输入n和k的值(在n个人中选取k个):";
    	cin>>n>>k;
    	cout

全部评论 (0)

还没有任何评论哟~