我知道它可能在Java和C ++等中,但这在Matlab中是否可行?
我最近发现Matlab没有像value++
这样的捷径,而是必须使用value = value+1
所以我想知道是否有可能将此函数转换为迭代函数。我不知道从哪里开始。如果是这样,它是否比递归函数更不利?
function [lines] = recurse(R,C, lines, T_l, count, directions)
[rows, columns] = size(lines);
if((R < 2 || C < 2) || (R > rows-1 || C > columns - 1) || count>500)
count= count+1;
return;
end
count= count+1;
direction = directions(R,C);
if(direction >= 68 || direction <=-68)
if(lines(R-1,C) > T_l)
lines(R-1,C) = 0;
lines = recurse(R-1,C, lines, T_l, count, directions);
end
if(lines(R+1,C) > T_l)
lines(R+1,C) = 0;
lines = recurse(R+1,C, lines, T_l, count, directions);
end
elseif (direction <= -23 && direction >-68)
if(lines(R+1,C+1) > T_l)
lines(R+1,C+1) = 0;
lines = recurse(R+1,C+1, lines, T_l, count, directions);
end
if(lines(R-1,C-1) > T_l)
lines(R-1,C-1) = 0;
lines = recurse(R-1,C-1, lines, T_l, count, directions);
end
elseif (direction >= 23 && direction < 68)
if(lines(R+1,C-1) > T_l)
lines(R+1,C-1) = 0;
lines = recurse(R+1,C-1, lines, T_l, count, directions);
end
if(lines(R-1,C+1) > T_l)
lines(R-1,C+1) = 0;
lines = recurse(R-1,C+1, lines, T_l, count, directions);
end
else
if(lines(R,C+1) > T_l)
lines(R,C+1) = 0;
lines = recurse(R,C+1, lines, T_l, count, directions);
end
if(lines(R,C-1) > T_l)
lines(R,C-1) = 0;
lines = recurse(R,C-1, lines, T_l, count, directions);
end
end
lines(R,C) = 255;
return;
基本上,我目前有一个递归调用第二个函数的函数。我希望将这个递归函数合并到函数中,将其称为迭代命令集。 我很确定它会慢一点,但速度对我来说不是问题,我很想知道循环是如何工作的。感谢。
答案 0 :(得分:1)
您可以使用operator
完成value++
(但您需要使用符号工具箱)。
operator(symb, f, T, prio)
定义了symb
类型的新运算符符号T
(前缀|后缀|二进制| Nary),优先级为prio
。函数f
使用new运算符计算表达式。
给定运算符符号“++”,比如评估函数f
,解析器构建以下表达式,具体取决于运算符的类型,其中:
前缀:输入++ x导致f(x)。
Postfix :输入x ++导致f(x)。
二进制:输入x ++ y ++ z导致f(f(x,y),z)。
Nary :输入x ++ y ++ z导致f(x,y,z))。
在matlab的documentation上查看更多内容。