0

再帰関数に配列を渡したいのですが、すべての配列を保持する必要があります

出力:

1 0 0 0 0 
1 2 0 0 0 
1 2 3 0 0 
1 2 3 0 0 
1 2 3 0 0

前のステップに戻ったら、配列を使用したい: 1 2 0 0 0

2 回目のリターン: 1 0 0 0 0

これではない : 1 2 3 0 0

私の目標は、このような出力を見ることです

1 0 0 0 0 
1 2 0 0 0 
1 2 3 0 0 
1 2 0 0 0 
1 0 0 0 0

.

    #include<iostream>
    using namespace std;
    int a[100];
    void go (int a[100],int x)
    {
         a[x]=x;
         for(int i=1;i<=5;i++)cout<<a[i]<<" ";cout<<endl;
         if(x==3)return;
           go(a,x+1);
        for(int i=1;i<=5;i++)cout<<a[i]<<" ";cout<<endl;
    }
    main()
    {
         go(a,1);
    }

1つの配列のみを使用します:/別の配列「a」を作成する必要があり、前のステップに戻ったときに、最後の配列ではなく、そのステップで記憶されたものを使用します

助けてください :(

4

3 に答える 3

2

ポインタを使用しているため、一時配列ではなくメモリに書き込みます。

vector を使用しても問題ない場合は、次のように記述できます。

#include<iostream>
#include<vector>
using namespace std;

void go(vector<int> a, int x)
{
    a[x] = x;
    for(int i = 1; i <= 5; i++)
        cout << a[i] << " ";
    cout << endl;
    if(x == 3)
        return;
    go(a, x+1);
    for(int i = 1; i <= 5; i++)
        cout << a[i] << " ";
    cout << endl;
}

int main()
{
    vector<int> a(100, 0);

    go(a, 1);
}

実行版:https ://ideone.com/rPgjoG

// 投稿する前にコードをフォーマットしてください。

于 2013-09-02T13:36:02.197 に答える
0

a[x + 1]=0;そのためには、再帰呼び出しの後に次の行を追加して、配列に入れた値を削除する必要があります。

#include<iostream>
using namespace std;
int a[100];
void go (int a[100],int x)
{
     a[x]=x;
     for(int i=1;i<=5;i++)cout<<a[i]<<" ";cout<<endl;
     if(x==3)return;
     go(a,x+1);
     a[x + 1]=0;
     for(int i=1;i<=5;i++)cout<<a[i]<<" ";cout<<endl;
}
main()
{
     go(a,1);
}

また、100の配列、または配列はまったく必要ありません。次のようにすることができます:

#include<iostream>
using namespace std;
void go (int x)
{

     for(int i=1;i<=5;i++)cout<<(i <= x ? i : 0);
     cout << endl;
     if(x==3)return;
     go(x+1);
     for(int i=1;i<=5;i++)cout<<(i <= x ? i : 0);
     cout << endl;
}
main()
{
     go(1);
}
于 2013-09-02T13:17:35.270 に答える