BigIntを使ってパスカルの三角形を計算します。ソースコードも簡単で、あっという間にUInt64の壁を超えてしまうのでBigIntの入門問題としては優れています。まずはテストとして10段までの計算をしましょう。
ソースコードは下記の通りです。
let MAX = 10
var pas: [[BigInt]] = []
for i in 0..<MAX {
print("\(i)", terminator: " ")
pas.append(Array(repeating: 0, count: i + 1)) // その行に必要な長さだけ確保
pas[i][0] = 1//両端は1
if i >= 2 {
for j in 1..<i {
pas[i][j] = pas[i - 1][j - 1] + pas[i - 1][j]
}
}
pas[i][i] = 1//両端は1
print("i = \(i): \(pas[i])")
}
// 最下段(MAX)のみ表示
/*
for j in 0..<MAX {
print("\(pas[MAX-1][j])")
}
*/
MAXが計算する段数です。ここを10にすると10段まで計算します。
0 i = 0: [1]
1 i = 1: [1, 1]
2 i = 2: [1, 2, 1]
3 i = 3: [1, 3, 3, 1]
4 i = 4: [1, 4, 6, 4, 1]
5 i = 5: [1, 5, 10, 10, 5, 1]
6 i = 6: [1, 6, 15, 20, 15, 6, 1]
7 i = 7: [1, 7, 21, 35, 35, 21, 7, 1]
8 i = 8: [1, 8, 28, 56, 70, 56, 28, 8, 1]
9 i = 9: [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
たいていの例題は10段になっています。その理由はいわゆる「三角形」型に出力するとデバッグエリアに収まらなくなるのとInt型をオーバーするからです。
次回はBigIntを使ったパスカルの三角形の計算に挑戦します。
