Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでパスカルの三角形を生成するプログラム


パスカルの三角形とは

ある整数 n が与えられたとき、n 行分のパスカルの三角形を生成することを考えます。パスカルの三角形は次のような形をしています。

Pythonでパスカルの三角形を生成するプログラム

パスカルの三角形の性質

パスカルの三角形には、「前の行で隣り合う2つの数の和が、その真下に配置される数の値になる」という重要な性質があります。

例えば、6行目の最初の「10」は5行目の「4」と「6」の和であり、同じく6行目の2つ目の「10」は5行目の「6」と「4」の和になっています。この性質により、各行を順番に計算していくことで三角形全体を構築できます。

入力と出力の例

入力が n = 5 の場合、出力は以下のようになります。

    1
   1 1
  1 2 1
 1 3 3 1
1 4 6 4 1

アルゴリズムの手順

この問題を解くためには、以下の手順に従います。

  • i を 0 から n+1 未満の範囲で繰り返す
    • j を 0 から n-i 未満の範囲で繰り返し、空白を1つずつ出力する(三角形を右に揃えるため)
  • 変数 C を 1 で初期化する
  • j を 1 から i+1 未満の範囲で繰り返す
    • C の値と空白を出力する
    • C を「C × (i − j) ÷ j」の商で更新する(二項係数の計算式)
  • 改行して次の行へ進む

ここで使われる更新式 C = C * (i - j) // j は、二項係数(組み合わせの数)を効率的に計算するための公式です。前の値を利用して次の値を求めることで、毎回階乗を計算する必要がなくなり、処理が高速になります。

Pythonでの実装例

それでは、実際の実装を見てみましょう。

def solve(n):
    for i in range(n+1):
        for j in range(n-i):
            print(' ', end='')

        C = 1
        for j in range(1, i+1):
            print(C, ' ', sep='', end='')
            C = C * (i - j) // j
        print()

n = 5
solve(n)

入力

5

出力

    1
   1 1
  1 2 1
 1 3 3 1
1 4 6 4 1

まとめ

このプログラムでは、外側のループで行を制御し、内側のループで空白による整形と数値の出力を行っています。二項係数の漸化式的な計算を用いることで、シンプルかつ効率的にパスカルの三角形を生成できます。計算量は O(n²) となり、n 行分のすべての要素を一度ずつ計算するだけで済みます。

  1. Pythonでカレンダーを作る方法!calendarモジュールの基本と使い方を解説

    Pythonには、カレンダーを扱うためのcalendarという標準モジュールが組み込まれています。この記事では、calendarモジュールの基本的な使い方について解説していきます。calendarモジュールでは、1週間は月曜日から始まり日曜日に終わります。また、このモジュールはグレゴリオ暦(西暦)に準拠しています。それでは、calendarモジュールの便利なメソッドをいくつか見ていきましょう。年間カレンダーを取得する特定の年のカレンダー全体を取得したい場合は、calendar.calendar(year)クラスのインスタンスを作成し、それを出力します。以下に具体例を示します。コード例# cal

  2. Pythonでクイックソートを実装する方法|初心者向けにサンプルコードを徹底解説

    この記事では、クイックソート(QuickSort)のアルゴリズムを使って配列を並べ替えるPythonプログラムの実装方法を、初心者にもわかりやすく解説します。 問題の定義 問題: 与えられた配列を、クイックソートの考え方を利用して昇順にソートすることです。 クイックソートは「分割統治法」と呼ばれる手法に基づく高速なソートアルゴリズムです。まず配列を基準値(ピボット)を境目に2つの部分に分割し、それぞれの部分配列を再帰的にソートしていくことで、最終的に全体が整列された配列を得られます。 クイックソートの仕組み 処理の流れは以下のとおりです。 配列からピボット(基準となる要素)を選びます。こ