在递归函数(MATLAB)中更新'cell'值

时间:2013-08-15 23:32:42

标签: matlab recursion binary-tree cell-array

我有一个二进制树,可以在MATLAB中作为单元格数组访问(例如a{1}{2})。我能够编写一个能够访问树的所有边缘节点的递归函数(下面)。我的下一个任务是用其他值替换边缘节点处的值。但是,我在这方面遇到了困难。每次调用递归函数时,值都不会保留其新值,而是恢复到原始值。有没有一种简单的方法可以确保值在函数中保持更新?谢谢!

以下是代码:

function findLeaves(a)
if(iscellstr(a) == 1) % just above fringe node
        a{2} = 2; %change fringe node to value 2
    else

        if(length(a) == 3 || length(a) == 2) % go left
            findLeaves(a{2}); 
        end

        if (length(a) == 3) % go right
            findLeaves(a{3}); 
        end

    end

end

1 个答案:

答案 0 :(得分:0)

在matlab中,内置数据类型的标准调用是value,这意味着传递的参数受到保护,不受函数中所做的更改的影响。例外是图形句柄,java句柄和从handle类类型继承的类。

因此,您必须将更改的结果作为输出传递,以便保留计算值。

function a = findLeaves(a)

if(iscellstr(a) == 1) % just above fringe node
    a{2} = 2; %change fringe node to value 2
else
    if(length(a) == 3 || length(a) == 2) % go left
        a{2}=findLeaves(a{2}); 
    end

    if (length(a) == 3) % go right
        a{3}=findLeaves(a{3}); 
    end

end