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