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) で判定することも可能です。大きな数値を頻繁に判定する場合は、こちらの手法も検討するとよいでしょう。
-
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となる数値に
-
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