如何在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);
但它给了我几个错误。有什么帮助吗?
答案 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。