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

JavaScriptで数値がフィボナッチ数かどうかを判定する方法

本記事では、JavaScriptを使って「ある数値がフィボナッチ数であるかどうか」を判定する関数の実装方法を解説します。フィボナッチ数とは、フィボナッチ数列(0, 1, 1, 2, 3, 5, 8, 13, 21, …)に含まれる数値のことです。

要件

数値を引数として受け取り、その数値がフィボナッチ数列に含まれている場合は true を、含まれていない場合は false を返す関数を作成します。

実装コード

const num = 2584;
const isFibonacci = num => {
    if(num === 0 || num === 1){
        return true;
    }
    let prev = 1;
    let count = 2;
    let temp = 0;
    while(count <= num){
        if(prev + count === num){
            return true;
        };
        temp = prev;
        prev = count;
        count += temp;
    };
    return false;
};
console.log(isFibonacci(num));
console.log(isFibonacci(6765));
console.log(isFibonacci(45));
console.log(isFibonacci(8767));

コードの解説

この関数は、フィボナッチ数列を先頭から順番に生成しながら、目的の数値と一致するかどうかを確認するシンプルなアプローチを採用しています。

処理の流れ:

  • まず、0 と 1 はフィボナッチ数列の最初の要素であるため、即座に true を返します。
  • prev(前の項)と count(現在の項)という2つの変数を使って数列を順に進めていきます。
  • 各ステップで「前の項 + 現在の項」が目的の数値と一致すれば true を返します。
  • 現在の項が目的の数値を超えた場合、その数値はフィボナッチ数ではないため false を返します。

出力結果

上記のコードをコンソールで実行すると、次の出力が得られます。

true
true
false
false

2584 と 6765 はフィボナッチ数列に含まれるため true となり、45 と 8767 は含まれないため false となっています。

補足:数学的な判定方法

なお、フィボナッチ数には「5n² + 4 または 5n² − 4 のいずれかが完全平方数になる」という有名な数学的性質があります。この性質を利用すれば、ループを使わずに O(1) で判定することも可能です。大きな数値を頻繁に判定する場合は、こちらの手法も検討するとよいでしょう。

  1. JavaScriptで数値に序数接尾辞(st・nd・rd・th)を追加する方法

    問題JavaScriptで関数を作成する必要があります。この関数は、数値 num を最初の(唯一の)引数として受け取ります。関数の役割は、英語の序数表記のルールに従って、数値に「st」「nd」「rd」「th」という接尾辞を追加することです。具体的なルールは以下の通りです。一の位が1で終わる数値には「st」を使用します(例:1st、発音はfirst)一の位が2で終わる数値には「nd」を使用します(例:92nd、発音はninety-second)一の位が3で終わる数値には「rd」を使用します(例:33rd、発音はthirty-third)上記ルールの例外として、下二桁が11・12・13となる数値に

  2. C言語でフィボナッチ数列を生成するプログラムの解説

    整数 n が与えられたとき、0 から始めて n 項目までのフィボナッチ数列を生成するのが本記事の目的です。フィボナッチ数列は次のような形で表されます。 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 この数列では、最初の 2 つの値である 0 と 1 は固定されています。それ以降は、直前の 2 つの数字を足し合わせて新しい値を作っていきます。例えば以下のようになります。 0+1=1(3番目の値) 1+1=2(4番目の値) 2+1=3(5番目の値) …以降も同様に続きます フィボナッチ数列の一般項 F(n) は、次の漸化式として定義できます。 Fn = Fn-1 + Fn-2