Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tổng tiền tố (Prefix sums) mảng tăng dần với đệ quy JavaScript

Cho mảng:

const arr = [10, 5, 6, 12, 7, 1];

Tổng liên tiếp lấy bớt 1 phần tử mỗi lần:

[10,5,6,12,7,1]=41 [5,6,12,7,1]=31 [6,12,7,1]=26 [12,7,1]=20 [7,1]=8 [1]=1

Kết quả: [41, 31, 26, 20, 8, 1]

Cách 1: map() + reduce()

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);

Cách 2: Đệ quy

2 hàm đệ quy: sumRecursively(arr, start) tính tổng từ start đến cuối, partSumRecursively() đệ quy nối kết quả.

Ví dụ

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));

Kết quả

Đầu ra console cho cả 2:

[ 41, 31, 26, 20, 8, 1 ]