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 ]