Recursion 用递归代码很难解决这个问题

Recursion 用递归代码很难解决这个问题,recursion,python-3.x,Recursion,Python 3.x,我需要找到最长公共子序列的长度 s和t是Strings,n和m是它们的长度。我想写一个递归代码 这是我迄今为止所做的,但我无法取得任何进展: def lcs_len_v1(s, t): n = len(s) m = len(t) return lcs_len_rec(s,n,t,m) def lcs_len_rec(s,size_s,t,size_t): cnt= 0 if size_s==0 or size_t==0: return 0

我需要找到最长公共子序列的长度

s
t
String
s,
n
m
是它们的长度。我想写一个递归代码

这是我迄今为止所做的,但我无法取得任何进展:

def lcs_len_v1(s, t):
    n = len(s)
    m = len(t)
    return lcs_len_rec(s,n,t,m)

def lcs_len_rec(s,size_s,t,size_t):
    cnt= 0
    if size_s==0 or size_t==0:
        return 0
    elif s[0]==t[0]:
        cnt= +1
    return cnt,  lcs_len_rec(s[1:], len(s[1:]), t[1:], len(t[1:]))
这项工作:

def lcs(xstr, ystr):
    if not xstr or not ystr:
        return ""
    x, xs, y, ys = xstr[0], xstr[1:], ystr[0], ystr[1:]
    if x == y:
        return x + lcs(xs, ys)
    else:
        return max(lcs(xstr, ys), lcs(xs, ystr), key=len)

print(lcs("AAAABCC","AAAACCB"))  
# AAAACC

您应该知道递归方法只适用于相对简单的字符串;随着字符串变长,运算量会迅速增加。

使用记忆技术,您也可以使用很长的字符串运行算法。事实上,它只是O(n^2):

输出:

teststest

这是我的代码,我如何在上面使用记忆技术

def lcs_len_v1(s, t):
n = len(s)
m = len(t)
return lcs_len_rec(s,n,t,m)

def lcs_len_rec(s,size_s,t,size_t):
    if size_s==0 or size_t==0:
        return 0
    elif s[0]==t[0]:
        cnt=0
        cnt+= 1
        return cnt+ lcs_len_rec(s[1:], size_s-1, t[1:], size_t-1)
    else:
        return max(lcs_len_rec(s[1:], size_s-1, t, size_t), lcs_len_rec(s, size_s, t[1:], size_t-1))
def lcs_len_v1(s, t):
n = len(s)
m = len(t)
return lcs_len_rec(s,n,t,m)

def lcs_len_rec(s,size_s,t,size_t):
    if size_s==0 or size_t==0:
        return 0
    elif s[0]==t[0]:
        cnt=0
        cnt+= 1
        return cnt+ lcs_len_rec(s[1:], size_s-1, t[1:], size_t-1)
    else:
        return max(lcs_len_rec(s[1:], size_s-1, t, size_t), lcs_len_rec(s, size_s, t[1:], size_t-1))