使用递归法求解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)
还没有任何评论哟~
