Pregunta

He hecho esta tan lejos

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"))

por desgracia, imprime solo "d" y no "bcd" como era de esperar.Para mí se parece a la línea de "l2 = lcs(xs, ystr)" no ha de ser ejecutada, porque si añado la impresión de depuración en el principio de que se imprime esa función no ha sido llamado el ingenio de los argumentos "bcd" y "bcd", pero estoy seguro de que los valores están bien después del inicio de la instrucción else.Agradecería cualquier ayuda.

¿Fue útil?

Solución

Su xs variable es global

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

Primera línea corrompe xs valor utilizado por la segunda línea.
Haga todas sus variables temporales (x, y, xs, ys, l1, l2) local.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top