Lua:将递归动作变为单一动作

时间:2015-04-09 19:51:32

标签: recursion lua

我使用Lua创建一个"插件"对于基于Linux的操作系统。该程序包含一个C函数,该函数当前是递归的(不是故意的)。此时,每次调用该函数时,它都会提供4-5次结果。

我想问一个关于递归函数及其结果的问题。是否可以采用递归函数的多个(相同)结果并仅使用其中一组结果?

示例:(我将进入状态"操作系统功能"帮助指出已经编码到操作系统中的内容我将Lua集成到其中)

function abc123() -- OS function based in the OS
    local names = os_Names() -- OS function
    local index, var = os_Rows() -- OS function to pull vars from file
    for k,v in pairs(names) do
        index2, var2 = os_Rows(k) -- OS function to pull vars from file
        if var2 ~= var then
            os_Rows(k,var2,var) -- RECURSIVE OS function
            cnt = 1
            while cnt <= 4 do
                 data_tbl = file_info(x,y,z) -- personal function to grab info and return a table
                 info_tbl[data_tbl.id]=data_tbl
                 loop_erase(info_tbl) -- my thoughts if possible
                 cnt = cnt + 1
            end
        end
    end
end

function loop_erase(entry) -- can something like this work????
    local order = {[1]="",[2]="",[3]="",[4]=""}
    for k,v in ipairs(entry) do
        for key,value in ipairs(order) do
            if key == k then
                value = v
            end
        end
    end
end

有四个从属设备,其名称保留在os_Names功能中。在四个从站中的任何一个上选择特定文件时,将调用os_Rows函数并将index, var设置为文件的位置和名称。此时,for循环会检查其他设备上当前设置的内容。如果它与index, var不匹配,则它会选择该从属设备上的var文件。

现在,一切正常,直至if var2 ~= var。如果变量在所有四个names中都不匹配,那么它会执行导致问题的os_Rows(k,var2,var)操作系统功能。此时,执行了正确的功能,但它执行了四次。这发生在四个文件中的每一个上 - 四次是一个指数问题!所以这是我试图阻止的递归动作。最终,所有这些信息都被传输到外部设备(通过以太网),我担心这会导致通信问题。

现在我知道我对此的处理可能非常简单,可以由专业程序员缩短。但是现在,function abc123()连续四次返回四个结果(这很好)(这很糟糕)。我的想法是,我会尝试将它们放入表中,如果该表的键匹配,那么它只会覆盖它们。

a)我不确定是否有可能这样做,因为到目前为止我的尝试还没有成功

b)如果有可能,我认为function loop_erase将是可行的方法。

我认为这是不可能的,因为每次递归函数发生时,它仍然会调用它链接到的其他函数。我一直在尝试不同的方法而不去。

0 个答案:

没有答案