下面这个链接里有关于两种斯特林数的详细解释:
linkhttps://blog.youkuaiyun.com/u011815404/article/details/80083954
不过边界条件好像写的不是很清楚。
#include<iostream>
using namespace std;
typedef long long ll;
ll S2(int n,int m)//这里面盆当成一样的
{
if(m<=0||n<m) return 0;//盆数为0和盆数大于球数的情况都无解
else if(n==m) return 1;//盆数等于球数时只有一种解
else return m*S2(n-1,m)+S2(n-1,m-1);//递推式
}
ll jc(int n)//求阶乘的函数
{
if(n==1||n==0) return 1;//注意n=0的情况
else return n*jc(n-1);
}
int main()
{
int n,r;
cin>>n>>r;
cout<<S2(n,r)*jc(r)<<endl;//最后要乘上盒子数量的阶乘
return 0;
}