Как сказано в названии, у меня есть рекурсивная функция, и я пытаюсь построить структуру данных дерева из нее, чтобы сохранить мои результаты. Каждый узел состоит всего из одного числа. Проблема в том, что когда я ввожу дерево в следующий вызов функции, кажется, что передается только значение дерева, а не фактическое дерево. Кто-нибудь знает, как передать ссылку на дерево вместо этого?Как сделать «вызов со ссылкой» на рекурсивную функцию MatLab
Начальный вызов:
tree = struct('left', 'empty','right', 'empty','feature','empty');
decisiontree_train(AttributeSet, LabelSet, 50, tree, 'node');
Рекурсивная Функция:
function decisiontree_train(data, labels, before_split_purity_percentage, tree, branch)
% a1 is 0, a2 is 1
[ a1_split_data, a2_split_data, a1_split_labels, a2_split_labels, ...
split_feature ] = decisiontree_split(data, labels);
new_tree = struct('left', 'empty','right', 'empty','feature','empty');
if strcmp(branch, 'left')
tree.left = new_tree;
new_tree.feature = split_feature;
elseif strcmp(branch, 'right')
tree.right = new_tree;
new_tree.feature = split_feature;
elseif strcmp(branch, 'node')
tree.feature = split_feature;
new_tree = tree;
end
[ after_split_purity_percentage ] = decisiontree_classcount(a1_split_labels);
if after_split_purity_percentage < 100 && ...
after_split_purity_percentage > before_split_purity_percentage
decisiontree_train(a1_split_data, a1_split_labels, ...
after_split_purity_percentage, new_tree, 'left');
end
[ after_split_purity_percentage ] = decisiontree_classcount(a2_split_labels);
if after_split_purity_percentage < 100 && ...
after_split_purity_percentage > before_split_purity_percentage
decisiontree_train(a2_split_data, a2_split_labels, ...
after_split_purity_percentage, new_tree, 'right');
end
% add variable to workspace
% assignin('base', 'a1_split_data', a1_split_data)
end
http://www.mathworks.com/matlabcentral/answers/152-can-matlab-pass-by-reference – rayryeng