Matlab - 将递归函数转换为迭代函数

时间:2013-02-14 21:35:28

标签: function matlab loops recursion if-statement

我知道它可能在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;

基本上,我目前有一个递归调用第二个函数的函数。我希望将这个递归函数合并到函数中,将其称为迭代命令集。 我很确定它会慢一点,但速度对我来说不是问题,我很想知道循环是如何工作的。感谢。

1 个答案:

答案 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上查看更多内容。