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

JavaScriptで長方形内に埋め込まれた正方形の周囲長の合計を求める方法


問題

下図のように、1つの長方形の中に正方形が5つ埋め込まれている状況を考えてみましょう。

JavaScriptで長方形内に埋め込まれた正方形の周囲長の合計を求める方法

このとき、それぞれの正方形の周囲長は次のようになります。

4 + 4 + 8 + 12 + 20 = 48 単位

一見すると複雑な計算が必要そうに思えますが、よく観察すると各正方形の一辺の長さがフィボナッチ数列(1, 1, 2, 3, 5, ...)に従っていることが分かります。つまり、n個の正方形が埋め込まれている場合、周囲長の合計は「最初のn項のフィボナッチ数の総和 × 4」で求められるのです。

そこで本記事では、数値 n を引数として受け取り、n個の正方形が埋め込まれた場合の周囲長の合計を返すJavaScript関数を実装していきます。

コード例

以下が実際の実装です。

const num = 6;
const findPerimeter = (num = 1) => {
    const arr = [1, 1];
    let n = 0;
    let sum = 2;
    for (let i = 0; i < num - 1; i++) {
        n = arr[i] + arr[i + 1];
        arr.push(n);
        sum += n;
    };
    return sum * 4;
};
console.log(findPerimeter(num - 1));

出力結果

80

コードの解説

この関数の仕組みを順を追って見ていきましょう。

1. 初期化: 配列 arr を [1, 1] で初期化し、合計値 sum の初期値も 2(= 1 + 1)としています。これはフィボナッチ数列の最初の2項に相当します。

2. フィボナッチ数列の生成: ループ処理の中で、配列の末尾2つの要素を足し合わせた値を新たな要素として追加しながら、同時に合計値も更新していきます。これにより、各正方形の一辺の長さが順番に求まっていきます。

3. 周囲長への変換: 最後に合計値を4倍しています。正方形の周囲長は「一辺 × 4」であるため、すべての辺の長さの総和を4倍するだけで、目的となる周囲長の合計が得られるのです。

このアプローチにより、時間計算量 O(n)・空間計算量 O(n) という効率的な解法が実現できます。さらにメモリを節約したい場合は、配列を使わずに前の2つの値だけを保持する変数で実装することも可能です。

  1. JavaScriptで数値の全桁を再帰的に合計して一桁にする方法

    はじめに数値を受け取り、その各桁の合計が一桁になるまで再帰的に計算し続ける関数を作成する必要があるとしましょう。例えば、次のように動作します。findSum(12345) = 1+2+3+4+5 = 15 = 1+5 = 6この場合の出力は 6 になります。それでは、この関数 findSum() の実装コードを見ていきましょう。コード例// 再帰を使用した実装const findSum = (num) => {    if(num < 10){        re

  2. 【初心者向け】JavaScriptでボタンクリック時に数値を加算するSum関数の作り方

    はじめに 本記事では、ボタンをクリックするたびに指定した値を加算していき、結果を画面に表示するシンプルなJavaScriptの「Sum関数」の実装方法を解説します。onclickイベントとparseInt()を組み合わせることで、わずか数行のコードで動的な加算処理を実現できます。 ボタンの準備 まず、以下のようなHTMLボタンを用意します。 <button type=button onclick=addTheValue(10)>Sum</button> このボタンがクリックされると、引数として10を渡して関数 addTheValue(10) が呼び出されます。つま