我是动态规划的新手,并使用动态编程来寻找最长的公共子序列,但是为了更好地理解DP,我认为这将是一个好主意在递归函数中的每个if-else条件中打印结果,但输出对我没有意义。最长公共子序列程序的逐步输出对我来说毫无意义
例如,第一个输出是“Now m and n both are 0”,但是为什么?不应该是“最后的字符B和B是否相等”?我确信编译器正在使用一些我不知道的逻辑,但我真的想知道实际发生了什么!
#include<iostream>
#include<cstring>
using namespace std;
int max(int a, int b)
{
return (a > b) ? a : b;
}
int lcs(char *X, char *Y, int m, int n)
{
if (m == 0 || n == 0)
{
cout << " Now m and n both are 0" << endl;
return 0;
}
if (X[m - 1] == Y[n - 1])// last character same
{
cout << " Last characters " << X[m - 1] << " & " << Y[n - 1] << "are equal " << endl;
return (1 + lcs(X, Y, m - 1, n - 1)); // add 1 + computer for rest
}
else
{
cout << " Last characters " << X[m - 1] << " & " << Y[n - 1] << "are unequal " << endl;
return max(lcs(X, Y, m, n - 1), lcs(X, Y, m - 1, n));
}
}
int main()
{
char X[] = "AGGTAB";
char Y[] = "GXTXAYB";
int m = sizeof(X)-1;
int n = sizeof(Y)-1;
cout << " LCS length is " << lcs(X, Y, m, n) << endl;
int a;
cin >> a;
}