C++ 将数组传递给递归函数

C++ 将数组传递给递归函数,c++,arrays,recursion,C++,Arrays,Recursion,我想把数组传递给递归函数,但我需要保留所有数组 输出: 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 第二次返回:100 不是这个:12300 我的目标是看到这样的输出 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 #包括 使用名称空间std; INTA[100]; 无效go(整数a[100],整数x) { a[x]=x;

我想把数组传递给递归函数,但我需要保留所有数组

输出:

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

第二次返回:100

不是这个:12300

我的目标是看到这样的输出

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

#包括
使用名称空间std;
INTA[100];
无效go(整数a[100],整数x)
{
a[x]=x;

对于(int i=1;i),您需要通过在递归调用之后添加行
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);
}
#包括
使用名称空间std;
INTA[100];
无效go(整数a[100],整数x)
{
a[x]=x;

对于(int i=1;i),您需要通过在递归调用之后添加行
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);
}
#包括
使用名称空间std;
INTA[100];
无效go(整数a[100],整数x)
{
a[x]=x;

对于(int i=1;i在一般情况下,您可以传递C++11数组类(或者向量,或者如果您不能使用C++11,则甚至传递包含数组和重载运算符[]的结构的某些类),但传递速度会更慢,因为每次传递数组时,它都会被复制,堆栈中需要更多的内存

#include<iostream>
#include<array>
using namespace std;
array<int, 100> a;
void go (array<int, 100> 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()
{
    go(a,1);
}
#包括
#包括
使用名称空间std;
阵列a;
无效go(数组a,整数x)
{
a[x]=x;

对于(int i=1;i在一般情况下,您可以传递C++11数组类(或者向量,或者如果您不能使用C++11,则甚至传递包含数组和重载运算符[]的结构的某些类),但传递速度会更慢,因为每次传递数组时,它都会被复制,堆栈中需要更多的内存

#include<iostream>
#include<array>
using namespace std;
array<int, 100> a;
void go (array<int, 100> 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()
{
    go(a,1);
}
#包括
#包括
使用名称空间std;
阵列a;
无效go(数组a,整数x)
{
a[x]=x;

对于(inti=1;i,这是因为您使用的是指针,所以您不在临时数组中写入,而是在内存中写入

如果使用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);
}
#包括
#包括
使用名称空间std;
无效go(向量a,整数x)
{
a[x]=x;

对于(inti=1;i,这是因为您使用的是指针,所以您不在临时数组中写入,而是在内存中写入

如果使用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);
}
#包括
#包括
使用名称空间std;
无效go(向量a,整数x)
{
a[x]=x;


对于(int i=1;i数组大小N的有效索引为0到N-1。这里可能没有问题,因为数组大小为100,您正在访问1到5。数组大小N的有效索引为0到N-1。这里可能没有问题,因为数组大小为100,您正在访问1到5。是的,但我不想删除它,我希望代码创建其arr所有递归步骤都是“a”。我不想自己还原数组-。-@AnimeaAnimea如果你在数组中放入值后要打印数组,那么你要打印数组中的值。你已经放入了值“2”和“3”在数组中,如果要打印它们,请打印它们。如果不打印,请删除它们。您不能将值保存在数组中,并期望它们不会在数组中。我的代码在每个步骤中记住x的值;我希望它在每个步骤中也记住数组(如x)当我“返回”时使用它。@AnimeaAnimea你可以将数组复制到一个新数组并发送新数组。这对你有好处吗?你想举个例子吗?我只想使用一个数组:)是的,但我不想删除它,我想让代码为所有递归步骤创建它的数组“a”。我不想自己还原数组-。-@animeanimea如果你在数组中放入值后要打印数组,那么你要打印数组中的值。你已经放入了值“2”和“3”在数组中,如果要打印它们,请打印它们。如果不打印,请删除它们。您不能将值保存在数组中,并期望它们不会在数组中。我的代码在每个步骤中记住x的值;我希望它在每个步骤中也记住数组(如x)当我“返回”时使用它。@animeanimea你可以将数组复制到一个新数组并发送新的数组。这对你有好处吗?你想举个例子吗?我只想用一个数组:)是的,这就是我想要的:3我想为每个步骤复制数组(我不介意内存)P.S使用DEV C++ 4992,它给了我错误:在包含数组A的情况下,@动画引擎,编译器不支持C++ 11,因为它是从那个标准中的头文件。我用STD::vector添加代码,试试它。@ USE1839009,你知道为什么简单数组INTA[100 ]吗?不是在递归的每个步骤中创建的?为什么我必须使用vector或smth else而不是int a[]?这将在每次递归函数“go”时分配vector a的新副本调用。我有一个执行类似操作的程序,但随后继续运行并执行其他操作,内存是一个问题。我是否应该在函数中删除a(“delete a;”)的本地副本,然后再返回?是的,这就是我想要的:3我想为每个步骤复制数组(我不介意内存)P.S使用DEV C++ 4992,它给了我错误:在包含数组A的情况下,@动画引擎,编译器不支持C++ 11,因为它是从那个标准中的头文件。我用STD::vector添加代码,试试它。@ USE1839009,你知道为什么简单数组INTA[100 ]吗?不是在递归的每个步骤中创建的?为什么我必须使用vector或smth else而不是int a[]?这将在每次递归函数“go”时分配vector a的新副本调用。我有一个程序,执行类似的操作,但随后继续运行并执行其他操作,内存是一个问题。我是否应该在函数中删除a(“delete a;”)的本地副本,然后再返回?这将在每次递归函数“go”时分配向量a的新副本调用。我有一个程序,执行类似的操作,但随后继续运行并执行其他操作,内存是一个问题。我是否应该在函数返回之前删除该函数中a(“delete a;”)的本地副本?这将在每次调用递归函数“go”时分配向量a的新副本