在n个球中取m个(不放回),求有多少种取法
通过增加变量,来实现递归,增加一个特殊球,分为取到这个特殊球和没有取到这个特殊球
int combination(int n,int m)
{
if(n<m)
return 0;
if(n==m)
return 1;
if(m==0)
return 1;
return combination(n-1,m) + combination(n-1,m-1);
}
求n个元素的全排列
void Swap(int data[],int i,int j)
{
int t = data[i];
data[i] = data[j];
data[j] = t;
}
// k 是当前的交换位置(关注点),k与其后的元素交换
void f(int array[],int k)
{
if(k == strlen(array)-1)
printf("%s",array);
for(int i=k;i<strlen(array);i++)
{
swap(array,i,k);
f(array,k+1);
swap(array,i,k);
}
}