如何在Matlab中设置在递归函数中运行的迭代次数?

时间:2016-05-29 12:44:25

标签: matlab recursion

如何在Matlab中设置递归函数中运行的迭代次数? 我有以下功能

function t=m(x1,x2)
if x1<0.5
    if x2<0.5
        t=(0+m(2*x2, 2*x1))/4;
    else
        t=(1+m(2*x1, 2*x2-1))/4;
    end
else
    if x2>=0.5
       t=(2+m(2*x1-1, 2*x2-1))/4;
    else
       t=(3+m(1-2*x2, 2-2*x1))/4;
    end
end

end 

我希望它执行10^3次迭代。

我试过

function t=m(x1,x2,iter)
while iter<=10^3
      if x1<0.5
         if x2<0.5
            t=(0+m(2*x2, 2*x1, iter+1))/4;
         else
            t=(1+m(2*x1, 2*x2-1, iter+1))/4;
         end
      else
        if x2>=0.5
           t=(2+m(2*x1-1, 2*x2-1, iter+1))/4;
        else
           t=(3+m(1-2*x2, 2-2*x1, iter+1))/4;
        end
      end
end
end

并在主

    x1=0.3;
    x2=0.4;
    iter=0;
    t=m(x1,x2,iter);

但它给了我几个错误。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

首先,你不应该把这个循环放在你的函数中。重复是递归的作用。所以将你的功能改为:

function t=m(x1,x2,iter)
t = 0;
if iter > 0
      if x1<0.5
         if x2<0.5
            t=(0+m(2*x2, 2*x1, iter-1))/4;
         else
            t=(1+m(2*x1, 2*x2-1, iter-1))/4;
         end
      else
        if x2>=0.5
           t=(2+m(2*x1-1, 2*x2-1, iter-1))/4;
        else
           t=(3+m(1-2*x2, 2-2*x1, iter-1))/4;
        end
      end     
end
end

(假设您希望它在最后一次迭代后返回0)

现在你可以这样调用你的函数:

m(0.3, 0.4, 10^3)

但在此之前,请致电:

set(0,'RecursionLimit',10^3+2)

对于这些输入,仅在8次迭代后收敛到0.1808。