集合划分

如题:

思路:

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;
}
posted @ 2023-12-10 17:56  Kirei7  阅读(26)  评论(0)    收藏  举报