【JavaScript】パドヴァン数列のn番目の要素を求める方法
パドヴァン数列とは
パドヴァン数列(Padovan Sequence)とは、次の初期値で定義される整数列 P(n) のことです。
P(0) = P(1) = P(2) = 1
そして、以下の漸化式に従って各項が決まります。
P(n) = P(n-2) + P(n-3)
この漸化式から導かれる最初のいくつかの値は次のとおりです。
1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 16, 21, 28, 37, 49, 65, 86, 114, 151, 200, 265, …
フィボナッチ数列が直前の2項の和で定義されるのに対し、パドヴァン数列は「2つ前」と「3つ前」の項を足す点が特徴的です。建築家リチャード・パドヴァンの名前にちなんだこの数列は、隣接する3辺が正三角形をなす螺旋構造など、自然界やデザインの分野にも現れることで知られています。
問題
ここでは、数値 n を引数として受け取り、パドヴァン数列の n 番目の項を返す JavaScript 関数を作成します。
実装例
以下のコードをご覧ください。
const num = 32;
const padovan = (num = 1) => {
let secondPrev = 1, pPrev = 1, pCurr = 1, pNext = 1;
for (let i = 3; i <= num; i++){
pNext = secondPrev + pPrev;
secondPrev = pPrev;
pPrev = pCurr;
pCurr = pNext;
};
return pNext;
};
console.log(padovan(num));コードの解説
この実装では、反復処理によって効率的に n 番目の項を求めています。
変数 secondPrev(2つ前の項)、pPrev(1つ前の項)、pCurr(現在の項)の3つの変数を使い、ループ内で毎回新しい項 pNext を計算しながら値をずらしていきます。初期値として最初の3項すべてに 1 を設定しているため、n が 0〜2 の場合はそのまま 1 が返されます。
時間計算量は O(n)、空間計算量は O(1) であり、再帰的な実装と比べて大きな n に対しても高速に動作するのがメリットです。
出力結果
5842
n = 32 を渡した場合、32番目の項である 5842 が出力されます。
-
JavaScriptで学ぶフィボナッチ数列:素朴な再帰からメモ化(動的計画法)への最適化
フィボナッチ数とは フィボナッチ数とは、「最初の2つの数以降、各項がその直前の2つの数の和になる」という性質を持つ数列のことです。数列は 1, 1 から始まります。 1, 1, 2, 3, 5, 8, 13, 21, 34, … 素朴な再帰による実装 n番目のフィボナッチ数を求めるプログラムは、シンプルには次のように書けます。 function fibNaive(n) { if (n <= 1) return n; return fibNaive(n - 1) + fibNaive(n - 2); } 実際に動かして確認してみましょう。 console.log(fibN
-
JavaScriptで親要素の子要素を取得する方法【サンプルコード付き】
JavaScriptでは、親要素が持つchildrenプロパティを参照することで、その直下にある子要素をまとめて取得できます。本記事では、実際に動作するサンプルコードを使いながら、具体的な手順をわかりやすく解説します。 サンプルコード 以下は、JavaScriptを使って親要素(parent1)の子要素を取得し、ボタンのクリックで一括表示させる例です。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta nam