提问人:shunyo 提问时间:12/24/2017 最后编辑:shunyo 更新时间:12/24/2017 访问量:200
MATLAB 中递归函数的引用传递
Pass by reference for recursive function in matlab
问:
我正在执行一个区域增长算法,并且有一个结构数组,其中包含一个结构,该结构包含一个名为 的字段。我正在通过递归函数传递 A,其中给定一个条件,被新节点附加。该函数称为:A
a
nodes
grow_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] 矩阵 - 段的参数
nodes - 区域中包含的节点数 - 以 A 中的节点开头
A - 所有节点(区域的种子)
issame - 比较参数的函数,如果段相同,则返回 1,如果段不同,则返回 0
答: 暂无答案
评论
a
nodes