JavaScriptで数値がフィボナッチ数かどうかを判定する方法
本記事では、引数として受け取った数値がフィボナッチ数列に含まれるかどうかを判定し、その結果を真偽値(true / false)で返すJavaScript関数の実装方法を解説します。
期待する動作
まず、どのような動作を目指すのか確認しましょう。例えば、次のように関数を呼び出した場合:
fibonacci(12); fibonacci(89); fibonacci(55); fibonacci(534);
出力は以下のようになります:
false true true false
このように、12と534はフィボナッチ数列に含まれないため「false」、55と89は含まれるため「true」が返されます。
再帰を使った実装方法
ここでは、再帰処理を用いたシンプルな解法を紹介します。このアプローチでは、フィボナッチ数列を先頭から順に生成しながら、対象の数値と一致するかどうかを確認していきます。
コード例
const fibonacci = (query, count = 1, last = 0) => {
if(count < query){
return fibonacci(query, count+last, count);
};
if(count === query){
return true;
}
return false;
};
console.log(fibonacci(12));
console.log(fibonacci(55));
console.log(fibonacci(89));
console.log(fibonacci(534));
仕組みの解説
この関数は3つのパラメータを受け取ります:
- query:判定したい数値
- count:現在のフィボナッチ数(初期値は1)
- last:一つ前のフィボナッチ数(初期値は0)
countがqueryより小さい間は、「現在の数値」と「一つ前の数値」を足した値を新しいフィボナッチ数として、再帰的に自分自身を呼び出し続けます。そして、countがqueryと一致すればその数値はフィボナッチ数であるため「true」を返し、queryを超えてしまった場合はフィボナッチ数ではないため「false」を返します。
実行結果
コンソールには以下が出力されます:
false true true false
-
Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法
ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け
-
Pythonで数値が素数かどうかを判定する方法
素数判定の基本的な考え方ここで紹介する方法の原理は、与えられた数を3からその平方根までのすべての整数で順に割っていくというものです。ある数の平方根は、その数が持ちうる約数の中で最大の候補となる値です。したがって、平方根を超える数については、割り切れるかどうかを確認する必要はありません。この関数は、2で割り切れる数や2未満の数に対しては False を返します。それ以外の数については、組み込み関数 all() を使い、平方根以下のいずれかの数で割り切れる場合には False(素数ではない)、どの数でも割り切れない場合には True(素数である)を返します。サンプルコードdef is_prime(