给定含有n个元素的集合{1,2,...,n},可以将其划分为若干非空子集。例如,当n=4时,集合{1,2,3,4}可以构造15个不同的划分,如下。
{{1},{2},{3},{4}}
{{1234}}
{{1},{234}};{{2},{134}};{{3},{124}};{{4},{123}}
{{12},{34}};{{13},{24}};{{14},{23}}
{{1},{2},{34}};{{1},{3},{24}};{{1},{4},{23}}
{{12},{3},{4}};{{13},{2},{4}};{{14},{2},{3}}
编程任务
给定正整数n,试计算含有n个元素{1,2,3,...,n}可以划分为多少个不同的非空子集。
样例输入:
5
样例输出:
52
#include<stdio.h>
int f(int n,int m){
if(n<m)
return 0;
if(n==m)
return 1;
if(m==1)
return 1;
if(m<n)
return f(n-1,m-1)+m*f(n-1,m);
}
int main(){
printf("请输入元素的个数\n");
int n,m;
int count=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
count+=f(n,i);
printf("不同的非空子集数为:%d\n",count);
return 0;
}