从N个数中选取M个不同的数,共有多少种选法?并将结果打印出来。
解法:采用divide-conquer方法。
f(N,M) = f(N-1,M-1) + f(N-1, M);
具体代码如下:
#include<stdio.h>
#define N 100
#define M 5
int total = 0;
int func(int n, int m, int *stack)
{
int i;
if ( m == 1)
{
for( i = n; i > 0; i-- ){
//printf("%d, %d, %d, %d, %d \n",stack[5], stack[4], stack[3], stack[2], i );
total++;
}
}
if( m > 1){
stack[m] = n;
func( n-1, m-1, stack);
stack[m] = 0;
if( n-1 >= m )
func(n-1, m, stack);
}
return 0;
}
int main()
{
int i, j;
int stack[M+1];
func( N, M, stack);
printf("total = %d \n", total);
return 0;
}