0

我在python中有一个像这样的递归函数

def recon(i,j):
    if i == 0 or j == 0:
        return []
    elif x[i-1] == y[j-1]:
        return recon(i-1,j-1) + [x[i-1]]
    elif table[i-1,j] > table[i,j-1]:
        return recon(i-1,j)
    else:
        return recon(i,j-1)

我正在尝试用 C++ 重写它,但问题是这条线

            return recon(i-1,j-1) + [x[i-1]]

我尝试这样做是c ++,但它没有编译,有没有办法连接像python这样的数组并返回它们。

4

4 回答 4

3

不是数组。但是你可以用向量来做到这一点。

vector<int> x = ...;
vector<int> y = ...;
x.insert(x.end(), y.begin(), y.end()); // append y to x

您可以使用与动态分配的内存类似的东西,但使用向量更容易。

于 2012-10-24T08:40:19.787 回答
1

也许你可以试试这个

for(int j=0;j<10; j++)
    mer[j]=a[j];
for(int i=0; i<10; i++, j++)
    mer[j]=b[i];

其中 mer,a 和 b 已经是初始化的数组变量。

于 2012-10-24T08:53:41.017 回答
0

您需要创建一个大小正确的新数组以包含两个现有数组,然后循环遍历它们以将它们复制进去(在复制第二个数组时不要忘记在目标数组上保留偏移量)

于 2012-10-24T08:42:17.003 回答
0

似乎这里不需要递归:

vector<int> recon(int i, int j) {
    vector<int> ret;
    while(i > 0 && j > 0)
        if(x[i-1] == y[j-1])
            ret.push_back(x[--i]), --j;
        else if(table[i-1][j] > table[i][j-1])
            --i;
        else
            --j;
    std::reverse(ret.begin(), ret.end());
    return ret;
}

(免责声明:未经测试)

于 2012-10-24T08:44:47.360 回答