在matlab中通过引用传递递归函数

时间:2017-12-23 21:31:24

标签: matlab recursion pass-by-reference

我正在执行区域增长算法,并且包含一个包含结构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元素的)。我假设这是由于函数通过值而不是通过引用传递元素而发生的(我可能是错的)。所以我的问题是双重的:

  1. 我是否认为通过引用传递会纠正这种情况是正确的?
  2. 如果是这样,我如何将其转换为传递参考?
  3. 感谢您的帮助。

    编辑: a是包含以下信息的结构: params - [3x1]矩阵 - 段的参数

    节点 - 区域中包含的节点数 - 从A

    中的节点开始

    A - 所有节点(该地区的种子)

    issame - 比较参数的函数,如果段相同则返回1,如果段不同则返回0

0 个答案:

没有答案