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

ここでは再帰は不要のようです:

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 に答える
0

両方の既存の配列を含む正しいサイズの新しい配列を作成し、両方をループしてコピーする必要があります (2 番目の配列にコピーするときに宛先配列のオフセットを保持することを忘れないでください)。

于 2012-10-24T08:42:17.003 に答える