Ошибка в рекурсии при обходе дерева

254
19 мая 2017, 16:15

Есть функция, которая получает массив mas2 (он задаёт структуру дерева) и массив с параметрами param, которые нужно сложить по правилу в зависимости от заданной структуры дерева. Для приведённого примера ввода на выход приходит массив сумм [ 5, 4, 3, 2, 1, 2, 1, 2, 1 ], а ожидался [ 9, 8, 7, 2, 1, 2, 1, 2, 1 ]. Причина в цикле, в котором происходит рекурсивный вызов функции. Цикл выполняется, но набранная сумма теряется. Как это исправить?

onload = function() { 
var mas2=[[1],[2],[3,5,7],[4],[],[6],[],[8],[]];  
var param=[1,1,1,1,1,1,1,1,1]; 
var out=[],f=0; 
var N=param.length;  
for (var i=0; i<N;i++){ 
  out[i]=recurs(i); 
} 
console.log(out); 
function recurs(i){  
  if (mas2[i].length==0) {  
    f= param[i] ; 
  } else{ 
    var Nc=mas2[i].length; 
    for (var j=0; j<Nc; j++){  
      f= param[i]+ 
	  recurs(mas2[i][j]); 
    } 
 } 
  
 return f; 
 } 
  
 }

А вообще массив mas2 задаёт следующее правило: в его i-м элементе находятся номера элементов, которые являются дочерними для i-го. Так как в массиве param все единицы, то функция вернёт количество элементов от i-го до последнего, которые находятся в цепочке под i-м.

READ ALSO
Точно описать строчки кода. JS - слайдер

Точно описать строчки кода. JS - слайдер

Мне посоветовали взять этот кусок кодаЯ взяв, но толком мне не понятны некоторые моменты

239
Упрощение сложного if

Упрощение сложного if

Подскажите пожалуйста, можно ли упростить условие?

215
Как распарсить дату json?

Как распарсить дату json?

Хочу сделать так что бы ответ который приходит с сервера отображался на экране, не не могу найти как это сделать

327
Парсинг значений элементов с помощью JS

Парсинг значений элементов с помощью JS

Задача спарсить на JS все атрибуты товараПробовал различные вариации

296