Я сочиняю функию , которая получает массив mas (он задаёт структуру дерева) и массив с параметрами 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;
}
}
Массив mas задаёт следующее правило: в его i-м элементе находятся номера элементов, которые являются дочерними для i-го. Так как в массиве param все единицы, то функция вернёт количество элементов от i-го до концевого, которые находятся в цепочке под i-м.