سؤال

لقد فعلت هذا حتى الآن

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

لسوء الحظ فإنه يطبع فقط "d" وليس "bcd" كما هو متوقع.بالنسبة لي، يبدو أن السطر "l2 = lcs(xs, ystr)" لم يتم تنفيذه لأنه إذا أضفت تصحيح الأخطاء في البداية، فإنه يطبع هذه الوظيفة لم يتم استدعاؤها باستخدام الوسائط "bcd" و"bcd"، لكنني متأكد من أن القيم على ما يرام بعد بداية عبارة else.وسأكون ممتنا أي مساعدة.

هل كانت مفيدة؟

المحلول

لك xs المتغير عالمي

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

السطر الأول يفسد xs القيمة المستخدمة بواسطة السطر الثاني.
اجعل كل متغيراتك المؤقتة (x، y، xs، ys، l1، l2) محلية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top