将数组传递给递归函数
passing array to recursive function
我想把数组传递给递归函数,但我需要保持所有数组的
输出:
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
第二次返回: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个数组:/i需要它来创建另一个数组"a",当它返回到上一步时,不使用最后一个数组,而是使用该步骤中记住的那个数组
请帮助:(
在一般情况下,您可以传递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::vector,而不是std::array,因为它需要更少的堆栈内存,而且在一些程序中(不是在您的示例中),vector可以使用构造函数/运算符=的移动版本,而不是复制。
版本,使用std::vector:
#include<iostream>
#include<vector>
using namespace std;
vector<int> a(100);
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()
{
go(a,1);
}
这是因为您使用的是指针,所以您不是在临时数组中写入,而是在内存中写入。
如果使用矢量对你来说是满意的,你可以写:
#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
//张贴前请格式化您的代码。
为此,您需要删除已放入数组中的值,方法是在递归调用后添加行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);
}
相关文章:
- 使用递归的数组的最小值.这是怎么回事
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 使用递归输出数组
- 将数组传递给递归函数,同时C++修改它
- 尝试递归获取数组元素的总和
- 如何使用递归函数返回数组中整数的索引?
- 在递归函数中更有效地创建对象和对象数组?C++
- 线性递归反转数组
- C 递归找到数组的最小值
- 递归反转数组
- 如何在递归函数中调用引用数组?
- 递归定义数组中的数据对齐和排序
- C++递归函数,使用高和低查找数组中的最小值
- 将动态数组作为副本传递给递归函数 C++
- 使用递归输出数组
- 使用递归查找数组中的最大相对值
- 使用递归 C++ 返回数组的子集
- 使用递归将数组中的元素相乘
- 使用递归查找数组中的第k个最小元素
- 使用递归计算数组中某个元素出现的次数