Question

Je l'ai fait jusqu'à présent

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

malheureusement, il n'imprime que "d" et non "bcd" comme prévu.Pour moi, il semble que la ligne "l2 = lcs(xs, ystr)" n'ait pas été exécutée car si j'ajoute une impression de débogage au début, elle affiche que la fonction n'a pas été appelée avec les arguments "bcd" et "bcd", mais je suis sûr que les valeurs vont bien après le début de l'instruction else.J'apprécierais toute aide.

Était-ce utile?

La solution

Ton xs la variable est globale

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

La première ligne corrompt xs valeur utilisée par la deuxième ligne.
Rendez toutes vos variables temporaires (x, y, xs, ys, l1, l2) locales.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top