Frage

Ich habe das bisher gemacht

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

Leider wird nur „d“ und nicht wie erwartet „bcd“ ausgegeben.Für mich sieht es so aus, als ob die Zeile „l2 = lcs(xs, ystr)“ nicht ausgeführt wurde, denn wenn ich am Anfang debug print hinzufüge, wird gedruckt, dass die Funktion nicht mit den Argumenten „bcd“ und „bcd“ aufgerufen wurde. aber ich bin sicher, dass die Werte nach Beginn der else-Anweisung in Ordnung sind.Ich würde mich über jede Hilfe freuen.

War es hilfreich?

Lösung

Dein xs Variable ist global

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

Die erste Zeile ist beschädigt xs Wert, der von der zweiten Zeile verwendet wird.
Machen Sie alle Ihre temporären Variablen (x, y, xs, ys, l1, l2) lokal.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top