Показать сообщение отдельно
  #1 (permalink)  
Старый 18.05.2017, 20:53
Аватар для maternik
Аспирант
Отправить личное сообщение для maternik Посмотреть профиль Найти все сообщения от maternik
 
Регистрация: 15.10.2013
Сообщений: 31

Рекурсия при обходе дерева
Я сочиняю функию , которая получает массив 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-м.
Ответить с цитированием