在这个递归调用中,局部变量会发生什么?

时间:2011-09-23 11:47:50

标签: lua

在一个复杂的代码中,我发现了一个奇怪的行为:显然Lua不会将局部变量视为与C和Java相同(我并不感到惊讶,但我不知道它如何对待它们!)

我读过PILLua-users.org但没有一个没有提到递归中局部变量会发生什么。这让我开发了以下测试代码:

function addN(n)
    local ret=""
    if n>0 then
        ret=ret..addN(n-1)
        print("for n="..n.." ret='"..ret.."'")
    else
        print("n reached 0")
    end
    return ret
end

print("Final result='"..addN(9).."'")

预期结果:

Final result='987654321'

但我明白了:

Final result=''

为什么呢?我怎样才能达到预期的结果?

1 个答案:

答案 0 :(得分:5)

您实际上并未在任何地方连接n。尝试类似:

ret = tostring(n)..addN(n-1)