JavaScriptで1からnまでの自然数の総和を求める関数を実装する方法
問題
数値 n を引数として受け取る JavaScript の関数を作成する必要があります。この関数は、1 から n までのすべての自然数(1 と n そのものを含む)の合計を返すものとします。
解決アプローチ
最もシンプルな方法は、for ループを使って 1 から n までの数値を順番に加算していくことです。変数で合計値を保持し、ループが終わった時点でその値を返します。
コード例
以下が実際のコードです。
const num = 34;
const summation = (num = 1) => {
let res = 0;
for(let i = 1; i <= num; i++){
res += i;
};
return res;
};
console.log(summation(num));出力
コンソールには以下のように出力されます。
595
補足:数式を使った効率的な方法
ループを使う代わりに、等差数列の和の公式「n × (n + 1) ÷ 2」を利用すると、O(1) の計算量で瞬時に総和を求めることができます。大きな数値を扱う場合は、こちらの方法がパフォーマンス面で有利です。
const summationFormula = (num = 1) => {
return num * (num + 1) / 2;
};
console.log(summationFormula(34)); // 595どちらの方法でも同じ結果「595」が得られます。用途に応じて、可読性を重視するならループ方式、パフォーマンスを重視するなら公式方式を選ぶとよいでしょう。
-
JavaScriptの関数プロトタイプとは?仕組みと使い方を解説
JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに
-
JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説
JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン