我正在执行区域增长算法,并且包含一个包含结构A
的结构数组a
,其中包含一个名为nodes
的字段。我通过递归函数grow_a
传递A,在给定条件的情况下,a.nodes
被新节点追加。该函数被称为:
for i = 1:size(A,1)
% each element of the struct array
this_a = A(i).a;
% neighbors contain the neighbors of each node
% A is changed in the function
[a,A] = grow_a(this_a,i,neighbors,A);
% print a
end
grow_a
函数由:
function [this_a,A] = grow_a(this_a,node,neighbors,A)
for i = 1:size(neighbors,2)
neighbor = neighbors(node,i);
b = A(neighbor).a;
% auxilary function to see if the elements are similar
if(issame(this_a,b))
this_a.nodes = [this_a.nodes b.nodes];
A(neighbor).a = [];
[this_a,A] = grow_a(this_a,neighbor,neighbors,A);
end
end
end
问题是在递归期间,添加到this_a
的节点在递归后不会停留,只返回最后一个(i
元素的)。我假设这是由于函数通过值而不是通过引用传递元素而发生的(我可能是错的)。所以我的问题是双重的:
感谢您的帮助。
编辑: a是包含以下信息的结构: params - [3x1]矩阵 - 段的参数
节点 - 区域中包含的节点数 - 从A
中的节点开始A - 所有节点(该地区的种子)
issame - 比较参数的函数,如果段相同则返回1,如果段不同则返回0