如何在matlab中的数组或列表中存储递归函数的返回对象?

时间:2015-11-18 09:35:13

标签: arrays matlab recursion

我有一个递归函数,它返回图像的几个中心坐标(x,y)(例如15个中心点)。在每个循环中将结果打印到MATLAB工作空间。如何将它们保存到数组中而不是在输出中显示? (disp(s);)

function  [] = findGraphMhmd2(img,x1,y1,x2,y2,dir )
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
fontcolor=0;
[x,y]=FindCenter(img , fontcolor , x1,y1,x2,y2 );
    %cell{1}=[-1 -1];
    %[j,k]=size(cell);
    %k=k+1;
    %cell{k}=[x y];
    s=strcat(num2str(x),',',num2str(y));
    disp(s);
    %cells=cell;
if (abs(x1-x2)<5 || abs(y1-y2)<5)
    return;
else
    if(dir)
        findGraphMhmd2(img,x1,y1,x2,y,~dir);
        findGraphMhmd2(img,x1,y,x2,y2,~dir);
    else
        findGraphMhmd2(img,x1,y1,x2,y,~dir);
        findGraphMhmd2(img,x,y1,x2,y2,~dir);
    end;
end;

end
%--------------------------------------------

%---------------------------------------------
function [ xc,yc ] = FindCenter(imgs , fontcolor , x1,y1,x2,y2 )
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
black=0;
sigmax=0;sigmay=0;

        for x=x1:x2
            for y=y1:y2
                if imgs(x,y)==fontcolor
                    black=black+1;
                    sigmax=x+sigmax;
                    sigmay=y+sigmay;
                    %disp(black);str=strcat(num2str(x),',',num2str(y),'=>Ex=',num2str(sigmax),'=>Ey=',num2str(sigmay));disp(str);
                end;
            end;
        end;
        if(black==0)
            xc=0;yc=0;
        else
            xc=sigmax/black;
            yc=sigmay/black;
            xc=round(xc);
            yc=round(yc);
        end;

end

2 个答案:

答案 0 :(得分:3)

在使用disp的同一行保存内容:

Xstorage(x,y) = sigmax;
Ystorage(x,y) = sigmay;

Xstorage现在会在sigmax位置包含您的x,y。如果xy不是整数,请使用虚拟变量作为计数器,例如循环中的ii=ii+1并将其用作存储变量的索引。

如果您的x1x2y1y2不是整数,请按以下方式调用您的循环:

xtmp = x1:stepsize:x2; %// enter desired stepsize
ytmp = x1:stepsize:x2;
for x=1:numel(xtmp)
    for y=1:numel(ytmp)
        %// calculate stuff on xtmp(x) and ytmp(y) instead of x and y
        Xstorage(x,y) = sigmax;
        Ystorage(x,y) = sigmay;
    end
end

xy现在是指向数组xtmpytmp的整数指针,其中包含您实际的xy位置。< / p>

将两个新创建的存储变量也设置为函数输出:

function [xc,yc,Xstorage,Ystorage] = FindCenter(imgs , fontcolor , x1,y1,x2,y2 )

答案 1 :(得分:-1)

您可以使用持久变量和全局变量

factorial的脏代码看起来像这样

function temp = myfactorial(x)

persistent numCalls;
global y;
persistent count;
if isempty(numCalls)
    numCalls = 0;
end
if isempty(count)
    count = 0;
end
if (x==0);
    temp = 1;
    disp([mfilename ' recursed ' num2str(numCalls) ' times.'])
     numCalls = 0;
else
    numCalls = numCalls+1;
    temp= x*myfactorial(x-1);
    count=count+1;
    y(count) =temp;
end

确保在每次使用后清除变量。