MATLAB 中递归函数的引用传递

Pass by reference for recursive function in matlab

提问人:shunyo 提问时间:12/24/2017 最后编辑:shunyo 更新时间:12/24/2017 访问量:200

问:

我正在执行一个区域增长算法,并且有一个结构数组,其中包含一个结构,该结构包含一个名为 的字段。我正在通过递归函数传递 A,其中给定一个条件,被新节点附加。该函数称为:Aanodesgrow_aa.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_ai

  1. 我假设通过引用传递会纠正这种情况是否正确?
  2. 如果是这样,如何将其转换为传递引用?

谢谢你的帮助。

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

nodes - 区域中包含的节点数 - 以 A 中的节点开头

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

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

MATLAB 递归 引用传递

评论

0赞 zlon 12/24/2017
您能举例说明您的结构 A 吗?
0赞 shunyo 12/24/2017
例如 - A 是一个 1000x1 的结构数组,其结构具有字段。anodes
0赞 Tommaso Belluzzo 12/24/2017
太好了,但我们仍然缺乏可复制性,所以这有点不像我们能找到解决方案。
0赞 shunyo 12/24/2017
啊,我很抱歉。将其添加为编辑。
0赞 zlon 12/26/2017
还行。我会更清楚。你能发布应该起作用的代码吗?包含所有定义的变量。只需使用一些虚拟初始化即可。在代码中检测无法正常工作的问题真的很难,因为我们没有足够的输入

答: 暂无答案