2

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

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

4

1 回答 1

1

您可以value++使用 完成operator (尽管您将需要符号工具箱)。

operator(symb, f, T, prio)定义symb类型为T(Prefix | Postfix | Binary | Nary) 的新运算符符号,优先级prio。该函数f使用 new 运算符计算表达式。

给定运算符符号“++”,例如,使用评估函数f,解析器将根据运算符的类型构建以下表达式,其中:

前缀:输入 ++x 结果为 f(x)。

后缀:输入 x++ 结果为 f(x)。

二进制:输入 x ++ y ++ z 结果为 f(f(x, y), z)。

Nary : 输入 x ++ y ++ z 结果为 f(x, y, z))。

在 matlab 的文档中查看更多信息。

于 2013-02-14T22:33:53.590 回答