集合划分
如题:

思路:
1.特殊情况:
1)m=n return1。
2)m=1 return1。
2.递归
1)把前n-1个元素分成m-1份,然后n号元素单独放。
2)把前n-1个元素分成m份,然后把n号元素插入到这m个集合中(有m种插法)总数就是
F(n,m) =F(n-1,m-1) + m * F(n-1,m)
代码:
#include<stdio.h>
int F(int n,int m){
if(m == 1 || n == m)
return 1;
return m*F(n-1,m) + F(n-1,m-1);
}
int main(){
int n;
int i;
int sum = 0;
scanf("%d",&n);
for(i = 1; i <= n; i++)
sum += F(n,i);
printf("%d",sum);
return 0;
}

浙公网安备 33010602011771号