Рекурсивно вычислить сумму массива целых чисел в JavaScript - PullRequest
0 голосов
/ 01 июля 2018

Я хотел написать программу на JavaScript для вычисления суммы массива целых чисел Рекурсивно .

Ожидаемые результаты

Ввод : [1, 2, 3, 4, 5, 6]
Выход : 21

Я достиг вышеуказанных результатов с этим кодом:

function calculateSum(array) {
    if (array instanceof Array){
        if (!array.some(isNaN)) {
            var total = 0;

            array.forEach(function (value) {
                total += value;
            });

            return total;
        }
        return "Provide an Array with only Numeric Values";
    }

    return "Please provide an Array";
}

Но я ищу решение, которое использует Рекурсия .

РЕДАКТИРОВАТЬ : я начал выполнять вышеупомянутое упражнение для практики Рекурсия . Мне было трудно понять это. Итак, вот почему я разместил это. Я был бы рад, если бы вы поняли.

Заранее спасибо.

Ответы [ 5 ]

0 голосов
/ 28 сентября 2018
var numbers= [1,2,3,4,5,6];
sum=0;
function x(a,b){
  return a+b;
}
for (a in numbers){ 
 sum = x(numbers[a],sum);
 console.log(sum);
}

удачи

0 голосов
/ 02 июля 2018

Разрушающий синтаксис допускает элегантное функциональное выражение

const None =
  Symbol ()

const sum = ([ n = None, ...rest ]) =>
  n === None
    ? 0
    : n + sum (rest)

console.log
  ( sum ([])               // 0
  , sum ([ 1 ])            // 1
  , sum ([ 1, 2 ])         // 3
  , sum ([ 1, 2, 3 ])      // 6
  , sum ([ 1, 2, 3, 4 ])   // 10
  )
0 голосов
/ 01 июля 2018

рекурсия на самом деле является проблемой регрессии, Если массив с именем 'Arr' имеет только один элемент - это сумма, Теперь представьте, что вы знаете формулу суммы для массива из N элементов,

Теперь вы можете использовать рекурсию, чтобы найти сумму (N + 1) элементов массива, так как это просто последний элемент плюс сумма предыдущего N, которую вы уже знаете / рассчитали.

Пример прилагается. Узнайте больше на Википедии .

let arr = [10,100,1000,10000];
function sum(array){
  if(array.length === 1){
    return array[0];
  }else{
    return array[array.length-1] + sum(array.slice(0,array.length-1));
  }
}

console.log(sum(arr));
0 голосов
/ 01 июля 2018
var arr = [1, 2, 3, 4, 5];

function add(arr) {
    if(arr.length>1) {
      arr[0] += arr.splice(1,1)[0];
      return add(arr);
    } else
      return arr[0];
}
0 голосов
/ 01 июля 2018

Чтобы использовать рекурсию, вам просто нужен базовый случай и способ разбить входные данные на что-то меньшее, чем вы можете рекурсировать.

Сумма массива длины 1 просто arr[0] верно? Так что это правдоподобный базовый случай. При большем массиве сумма составляет один элемент плюс сумма всех остальных. Так что это ваш другой случай: arr[0] + sum(everything else)

Теперь вы можете написать простую функцию только с этими двумя случаями:

let arr = [1, 2, 3, 4, 5, 6] 

function add(arr) {
    if (arr.length == 1) return arr[0] // base case
    return arr[0] + add(arr.slice(1))  // recurse
}
console.log(add(arr))

Идея настолько проста, что вы можете выразить ее в виде одной строки:

const add = (arr) =>  arr.length == 1 ?  arr[0] : arr[0] + add(arr.slice(1))
console.log(add([1, 2, 3, 4, 5, 6] ))

Конечно, вам может потребоваться лучшая проверка ошибок, но это должно помочь вам начать работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...