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を使ったパスカルの三角形の計算に挑戦します。