JavaScriptの再帰を使用した合計のプレフィックス(合計が増加する配列の作成)
次の数の配列を考えてみましょう-
const arr = [10, 5, 6, 12, 7, 1];
連続する要素の合計は、すべての実行で1つ少ない要素を取り、-
になります。[10, 5, 6, 12, 7, 1] = 10 + 5 + 6 + 12 + 7 + 1 = 41; [5, 6, 12, 7, 1] = 5 + 6 + 12 + 7 + 1 = 31; [6, 12, 7, 1] = 6 + 12 + 7 + 1 = 26; [12, 7, 1] = 12 + 7 + 1 = 20; [7, 1] = 7 + 1 = 8; [1] = 1 = 1;
したがって、最終的な出力は次のような配列になります-
[ 41, 31, 26, 20, 8, 1 ]
上記の例に示すように、そのような配列を1つ取り込んで、partialSum配列を返す関数を作成する必要があります。
アプローチ1:map()とreduce()を一緒に使用する
ここでの考え方は単純です。配列内のすべての要素に対して1つの特定の要素を返す必要があるため、これを正確に実行するArray.prototype.map()メソッドを使用できます。
そして、特定のインデックスを比較することによって必要な要素の削減された合計を返すようにmap()メソッドを作成すると、作業が完了します。
だから、これを行うためのコードはここにあります-
const arr = [10, 5, 6, 12, 7, 1]; const partSum = arr.map((item, index) => { return arr.reduce((acc, val, ind) => { return ind >= index ? acc+val : acc; }, 0); }); console.log(partSum);
アプローチ2:再帰関数の使用
ここでは、2つの再帰関数を使用します
-
1つ目はsumRecursively(arr、start)で、インデックスの開始から最後までのarrの要素の合計を返します。
-
2つ目はpartSumRecursively()で、必要な合計を再帰的に配列に連結し、配列の最後に到達すると、連結された配列を返します。
これを行うためのコードは-
になります例
const arr = [10, 5, 6, 12, 7, 1]; const sumRecursively = (arr, start = 0, res = 0) => { if(start < arr.length){ return sumRecursively(arr, start+1, res+arr[start]); }; return res; }; const partSumRecursively = (arr, partSum = [], start = 0, end = arr.length-1) => { if(start <= end){ return partSumRecursively(arr, partSum.concat(sumRecursively(arr, start)), ++start, end); }; return partSum; }; console.log(partSumRecursively(arr));
出力
両方の方法のコンソールでの出力は-
になります[ 41, 31, 26, 20, 8, 1 ]
-
新しいキーワードでJavaScript配列を作成します。
以下は、新しいキーワードを使用してJavaScript配列を作成するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style&
-
JavaScriptで配列を昇順に変換する
シーケンスの増加 (0 <=i <=n-2)のようにすべてのi(0ベース)に対してarr [i] <=arr [i + 1]が成り立つ場合、配列を増加として定義します。 問題 最初で唯一の引数として、整数の配列arrを受け取るJavaScript関数を作成する必要があります。 この関数は、配列の最大1つの要素を変更することで、この配列を増加する配列に変換できるかどうかを判断する必要があります。 そうすることができれば、trueを返し、そうでない場合はfalseを返す必要があります。 たとえば、関数への入力が 入力 const arr = [8, 3, 3, 7, 9]; 出力