Что происходит с локальными переменными в этом рекурсивном вызове? - PullRequest
1 голос
/ 23 сентября 2011

В сложном коде я обнаружил странное поведение: очевидно, Lua не обрабатывает локальные переменные так же, как C и Java (я не удивлен, но я не знаю, КАК это так или иначе обрабатывает их!)

Я прочитал PIL и Lua-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 Ответ

5 голосов
/ 23 сентября 2011

Вы нигде не объединяетесь n. Попробуйте что-то вроде:

ret = tostring(n)..addN(n-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...