Pergunta

Eu tenho feito isso até agora

function lcs(xstr, ystr)
        if xstr:len() == 0 or ystr:len() == 0 then
                return ""
        end
        x = xstr:sub(1,1)
        y = ystr:sub(1,1)
        xs = xstr:sub(2)
        ys = ystr:sub(2)
        if x == y then
                return x .. lcs(xs, ys)
        else
                l1 = lcs(xstr, ys)
                l2 = lcs(xs, ystr)
                if l1:len() > l2:len() then
                        return l1
                else
                        return l2
                end
        end
end

print(lcs("abcd", "bcd"))

infelizmente, ele imprime apenas "d" e não "bcd" como esperado.Para mim parece que a linha "l2 = lcs(xs, ystr)" não será executada porque, se eu adicionar impressão de depuração no início imprime essa função tenha sido chamado de engenho argumentos "bcd" e "bcd", mas eu tenho certeza de que os valores são bem depois do início da instrução else.Gostaria muito de receber qualquer tipo de ajuda.

Foi útil?

Solução

O seu xs uma variável global

l1 = lcs(xstr, ys)
l2 = lcs(xs, ystr)

Primeira linha corrompe xs valor utilizado de segunda linha.
Fazer todas as suas variáveis temporárias (x, y, xs, ys, l1, l2) local.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top