返回后打印一些东西

張皓翔*_*張皓翔 2 c

我写了一个最长的公共子序列代码,并想使用递归打印最长的一个。

如果我把printfbefore 返回,结果将反向打印答案 - >“UAJM”。

所以我把printf后面的返回。

但是,输出为空。我希望它可以按顺序打印字符->“MJAU”。

多谢!

- - - - -更新 - - - - -

哦,我明白了!返回后,它立即退出函数,不再运行任何代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int map[20][20];
int maxlen;
int max(int a,int b)
{
    return a>b?a:b;
}
void LCS(char* X,char* Y,int m,int n)
{
    if(!m||!n)
        return ;
    if(X[m-1]==Y[n-1])
    {
        return LCS(X,Y,m-1,n-1);
        printf("%c",X[m-1]);
    }
    if(map[m-1][n]>map[m][n-1])
        return  LCS(X,Y,m-1,n);
    else
        return  LCS(X,Y,m,n-1);

}
void LCSlength(char* X,char* Y)
{
    int len1=strlen(X),len2=strlen(Y);

    for(int i=1;i<=len1;i++)
    {
        for(int j=1;j<=len2;j++)
        {
            if(X[i-1]==Y[j-1])
            {
                map[i][j]=map[i-1][j-1]+1;
            }
            else
                map[i][j]=max(map[i][j-1],map[i-1][j]);
        }
    }
}
int main()
{
    char *X = "XMJYAUZ", *Y = "MZJAWXU";
    int m=strlen(X),n=strlen(Y);
    LCSlength(X, Y);
    LCS(X, Y, m, n);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

dbu*_*ush 10

一旦return遇到语句,函数立即从该点返回。return执行之后没有进一步的语句。

仅仅因为您使用递归并不意味着您需要在递归调用时立即返回。这里你需要的是首先进行递归调用,然后打印,然后返回。

if(X[m-1]==Y[n-1])
{
    LCS(X,Y,m-1,n-1);
    printf("%c",X[m-1]);
    return;
}
if(map[m-1][n]>map[m][n-1])
    LCS(X,Y,m-1,n);
else
    LCS(X,Y,m,n-1);
Run Code Online (Sandbox Code Playgroud)

另外,请注意,由于函数的返回类型是void您不能在return语句中指定返回值。