1 #include <cstdio>
2 #include <cstdlib>
3 #include "util.h"
4
5 using namespace std;
6
stirling(int n,int m)7 double stirling(int n, int m)
8 {
9 double **s, temp;
10 int i, j;
11
12 if(n < m)
13 return 0.0;
14 else if(n == m)
15 return 1.0;
16 else if(m == 0 && n > 0)
17 return 0.0;
18 else if(m == 1 && n > 0)
19 return 1.0;
20
21 s = new double *[m];
22
23 for(i=0; i<m; i++)
24 s[i] = new double[n-m+1];
25
26 for(j=0; j<=n-m; j++)
27 s[0][j] = 1.0;
28
29 for(i=1; i<m; i++)
30 {
31 s[i][0] = 1.0;
32 for(j=1; j<=n-m; j++)
33 s[i][j] = (i+1)*s[i][j-1] + s[i-1][j];
34 }
35
36 temp = s[m-1][n-m];
37
38 for(i=0; i<m; i++)
39 delete [] s[i];
40
41 return temp;
42 }
43
44
45 #if 0
46 int main(int argc, char *argv[])
47 {
48 int n, m;
49
50 n = atoi(argv[1]);
51 m = atoi(argv[2]);
52
53 printf("S(%d,%d) = %f\n", n, m, stirling(n,m));
54
55 return 0;
56 }
57 #endif
58
59