Python递归调用不执行代码 - 3个序列的子序列的最长公共(public)

标签 python algorithm dynamic sequences seq

def lcs3(a, b, c, an, bn, cn):
global arr
print(an,bn,cn,end=" ")
print(arr[an][bn][cn],end="/ ")
if arr[an][bn][cn] != None:
    print ("Already here")
    return arr[an][bn][cn]
if an == 0 or bn == 0 or cn == 0:
    arr[an][bn][cn] = 0
    print("One of 3 inputs is 0")
elif a[an-1] == b[bn-1] and b[bn-1] == c[cn-1]:
    print("match!", an, bn, cn)
    arr[an][bn][cn] = lcs3(a,b,c,an-1,bn-1,cn-1)+1
else:
    print("Calculating")
    arr[an][bn][cn] = max(lcs3(a,b,c,an-1,bn,cn),
                          lcs3(a,b,c,an,bn-1,cn),
                          lcs3(a,b,c,an,bn,cn-1))
return arr[an][bn][cn]

这是我通过将 3 个序列和序列的长度作为输入来计算最长公共(public)子序列的函数。该算法是自上而下的动态规划,函数外定义arr(尺寸为an+1,bn+1,cn+1的3维列表)

编辑:打印问题已经解决,但我得到的答案仍然不正确。 用于输入

5

8 3 2 1 7

7

8 2 1 3 8 10 7

6

6 8 3 1 4 7

我得到 2 个返回。

最佳答案

简单的回答:

如果 arr[an][bn][cn] != None: 返回 arr[an][bn][cn] print("已经在arr")

您在第一个 if 语句中打印之前返回。

关于Python递归调用不执行代码 - 3个序列的子序列的最长公共(public),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51613093/

相关文章:

c# - 为什么这个运行时动态绑定(bind)会失败?

java - 为什么这段填充数组的代码会造成内存泄漏?

c# - 使用参数动态调用 dll 和方法

algorithm - CodeFight first重复面试挑战

python - 两列到一列的值差异

使用生成器和迭代器时,Python 多循环失败

python - Sklearn 将字符串类标签更改为 int

algorithm - 就时空复杂度而言,哪种解决方案更好?

c# - 对 0、1 和 2 的数组进行排序(进一步优化)

python - 是否可以将对象所属的所有者类称为属性?