Bell numbers: Difference between revisions

Line 590:
</pre>
 
 
=={{header|Groovy}}==
{{trans|Java}}
<lang groovy>class Bell {
private static class BellTriangle {
private List<Integer> arr
 
BellTriangle(int n) {
int length = (int) (n * (n + 1) / 2)
arr = new ArrayList<>(length)
for (int i = 0; i < length; ++i) {
arr.add(0)
}
 
set(1, 0, 1)
for (int i = 2; i <= n; ++i) {
set(i, 0, get(i - 1, i - 2))
for (int j = 1; j < i; ++j) {
int value = get(i, j - 1) + get(i - 1, j - 1)
set(i, j, value)
}
}
}
 
private static int index(int row, int col) {
if (row > 0 && col >= 0 && col < row) {
return row * (row - 1) / 2 + col
} else {
throw new IllegalArgumentException()
}
}
 
int get(int row, int col) {
int i = index(row, col)
return arr.get(i)
}
 
void set(int row, int col, int value) {
int i = index(row, col)
arr.set(i, value)
}
}
 
static void main(String[] args) {
final int rows = 15
BellTriangle bt = new BellTriangle(rows)
 
System.out.println("First fifteen Bell numbers:")
for (int i = 0; i < rows; ++i) {
System.out.printf("%2d: %d\n", i + 1, bt.get(i + 1, 0))
}
 
for (int i = 1; i <= 10; ++i) {
System.out.print(bt.get(i, 0))
for (int j = 1; j < i; ++j) {
System.out.printf(", %d", bt.get(i, j))
}
System.out.println()
}
}
}</lang>
{{out}}
<pre>First fifteen Bell numbers:
1: 1
2: 1
3: 2
4: 5
5: 15
6: 52
7: 203
8: 877
9: 4140
10: 21147
11: 115975
12: 678570
13: 4213597
14: 27644437
15: 190899322
1
1, 2
2, 3, 5
5, 7, 10, 15
15, 20, 27, 37, 52
52, 67, 87, 114, 151, 203
203, 255, 322, 409, 523, 674, 877
877, 1080, 1335, 1657, 2066, 2589, 3263, 4140
4140, 5017, 6097, 7432, 9089, 11155, 13744, 17007, 21147
21147, 25287, 30304, 36401, 43833, 52922, 64077, 77821, 94828, 115975</pre>
 
=={{header|Java}}==
1,452

edits