写一个关于递归算法的问题: n个元素的集合{1,2,3....,n}可以划分为若干个非空子集的集合
分两种情况讨论 假定有𝑆(𝑛, 𝑚)种不同方法把n个元素的集合划分成m个非空子集构成的集合, 𝑆(𝑛, 𝑚)种不同划分方法可以分为以下两类: • 先把 n-1 个元素的集合划分成 m 个非空子集,按定义其划分数目为 𝑆(𝑛 − 1, 𝑚), 再将剩下的一个元素插入到 m 个子集中的任意一个,最后把这两步合起来则 可构成 n 个元素集合的 m 划分,总共有𝑚 ∗ 𝑆(𝑛 − 1, 𝑚)中划分: • 先把 n-1 个元素的集合划分成 m-1 个子集,再将剩下的一个元素独立构造成 子集,显然,这两步合起来也可以构成有n个元素集合的m划分,总共有𝑆(𝑛 − 1, 𝑚 − 1)种划分。
𝑆(𝑛, 𝑚) = 𝑚 ∗ 𝑆(𝑛 − 1, 𝑚) + 𝑆(𝑛 − 1, 𝑚 − 1)
if((m==n) ‖ i(m==1))
return 1;
if((m>n) ‖ (m==0))
return 0;
return m*S(n-1,m)+S(n-1,m-1);
}