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

JavaScriptでパスカルの三角形のn行目の要素を求める方法


パスカルの三角形とは

パスカルの三角形は、前の行の隣接する要素同士を足し合わせていくことで構成される、三角形状の数列配置です。各行の両端は必ず1となり、内側の各要素はそのすぐ上にある2つの要素の和になります。

パスカルの三角形の最初のいくつかの要素は以下の通りです。

JavaScriptでパスカルの三角形のn行目の要素を求める方法

求めるもの

今回は、正の整数 num を唯一の引数として受け取り、パスカルの三角形の num 行目に存在するすべての要素を配列として返すJavaScript関数を作成します。

たとえば、入力が次の場合:

const num = 9;

期待される出力は以下のようになります。

const output = [1, 9, 36, 84, 126, 126, 84, 36, 9, 1];

解法のアプローチ

この問題は、三角形を上から順に構築していくことで効率よく解けます。具体的には、新しい行を作るたびに配列の先頭に1を挿入(unshift)し、隣接する要素同士を加算しながら更新していきます。こうすることで、処理が完了した時点で配列そのものが num 行目の要素リストになります。

コード例

実際のコードは次の通りです。

const num = 9;
const pascalRow = (num) => {
    const res = []
    while (res.length <= num) {
        res.unshift(1);
        for(let i = 1; i < res.length - 1; i++) {
            res[i] += res[i + 1];
        };
    };
    return res
};
console.log(pascalRow(num));

実行結果

コンソールには以下のように出力されます。

[
    1, 9, 36, 84, 126,
    126, 84, 36, 9, 1
]

コードの解説

  • 初期化: 空の配列 res を用意します。
  • ループ条件: res.lengthnum 以下である間、処理を繰り返します。最終的に配列の長さは num + 1 個となり、これは num 行目(0始まり)の要素数と一致します。
  • 先頭への挿入: 各反復で unshift(1) により先頭に1を追加し、新しい行の左端を表現します。
  • 要素の更新: インデックス1以降の各要素に対して「現在の値 + 右隣の値」を代入します。これにより、直前行の値が累積され、次の行の値へと変化していきます。

別のアプローチ:二項係数を利用する

パスカルの三角形の n 行目の k 番目の要素は、二項係数 C(n, k) と等しいという性質があります。そのため、階乗や乗算を組み合わせて直接計算する方法でも同じ結果を得られます。ただし、大きな行番号では桁あふれ(精度の問題)に注意が必要です。

  1. JavaScript DOMとは?基本の仕組みと要素の取得方法をわかりやすく解説

    JavaScriptのDOM(Document Object Model:ドキュメントオブジェクトモデル)は、Webページ上のHTML要素を表現する仕組みです。DOMはインターフェースとして機能し、ページのコンテンツやスタイルを変更することで、Webページを自由に操作できるようにします。 DOMにアクセスするには、Webページ上で右クリックして「検証(Inspect)」を選択します。すると画面の右側または左側にパネルが表示され、現在閲覧しているページのHTML要素を確認できます。要素にマウスカーソルを合わせると、ページ上の該当部分がハイライトされるため、どの要素がページのどのセクションに対応

  2. Pythonでパスカルの三角形のn番目の行を求める方法を解説

    パスカルの三角形とはある数 n が与えられたとき、パスカルの三角形の n 番目(0始まり)の行を求めることを考えます。パスカルの三角形は、次のようなルールで作成できます。最上行は「1」のみで構成される2行目以降は、左上の数と右上の数を足し合わせた値が並ぶ具体的には、以下のような形になります。例えば入力が 4 の場合、出力は [1, 4, 6, 4, 1] となります。解法のアプローチこの問題は、以下の手順で解くことができます。n が 0 の場合 → [1] を返すn が 1 の場合 → [1, 1] を返すls を [1, 1]、temp を [1, 1] として初期化するi を 2 から n