JavaScriptで入力値から数列の値を計算する方法
問題
数値 n を唯一の引数として受け取り、次の漸化式を満たす数列 u の第 n 項 un の値を求める JavaScript 関数を作成します。
数列 u の初期値は次のとおりです。
u1 = 0、u2 = 2
そして、隣接する 3 項は常に次の等式を満たすものとします。
6unun+1 − 5unun+2 + un+1un+2 = 0
アプローチ:一般項を見抜く
この漸化式には項同士の積が含まれており、一見すると複雑です。しかし、un = 2n という等比数列を代入してみると、この式が恒等的に成立することが分かります。
6 · 2n · 2n+1 − 5 · 2n · 2n+2 + 2n+1 · 2n+2
= 22n+1(6 − 10 + 4)
= 0
つまり、この数列の一般項は「2 のべき乗」です。したがって、ループで順番に計算する必要はなく、n が与えられれば 2n を一度計算するだけで答えが求まります。
コード例
以下が実際のコードです。
const num = 13;
const sequenceSum = (num = 1) => {
const res = Math.pow(2, num);
return res;
};
console.log(sequenceSum(num));
出力
8192
引数として 13 を渡しているため、2 の 13 乗である 8192 が出力されます。
より簡潔な書き方
ES2016 以降ではべき乗演算子 ** が使えるため、関数は 1 行で書けます。
const sequenceSum = (num = 1) => 2 ** num;
ポイントまとめ
- 複雑な漸化式に出会ったら、まず等比数列などの簡単な候補を代入して検証すると、一般項が見つかることがあります。
- 一般項が分かれば、逐次計算の代わりに
Math.powや**演算子による O(1) の計算で即座に答えを得られます。 - 大きな n に対しても高速に動作するため、実用面でも非常に有利です。
-
JavaScriptでフォーム送信時の入力値を変更する方法
JavaScriptでフォーム送信時にinput要素の値を変更したい場合は、documentオブジェクトを利用します。フォーム名とテキスト名を指定して、valueプロパティに新しい値を代入するだけで簡単に実現できます。基本構文入力値を変更するための基本構文は以下の通りです。document.yourFormName.yourTextName.value=anyValue;この構文では、「yourFormName」にフォームのname属性の値、「yourTextName」にinput要素のname属性の値を指定し、「anyValue」に設定したい新しい値を代入します。フォームの例ここでは、「Su
-
JavaScriptで入力値が数字か文字かを判定する方法【isNaN()関数の使い方】
入力された値が数字か文字(数値以外)かを判定するには、JavaScriptのisNaN()関数を使用します。この関数は、値がNaN(Not a Number:非数)である場合にtrueを返します。この特性を利用することで、ユーザーが入力した値が数値かどうかを簡単にチェックできます。 isNaN()関数とは isNaN()は「is Not a Number」の略称です。引数として渡された値が数値として解釈できない場合にtrueを、数値として解釈できる場合はfalseを返します。これにより、「入力内容が数字かどうか」をシンプルに判定できるのが特徴です。 サンプルコード 以下のコードでは、フォームの