C++ 线性递归反转数组
不明白我的递归函数为什么不工作C++ 线性递归反转数组,c++,C++,不明白我的递归函数为什么不工作 #include <iostream> using namespace std; int ReverseArray(int* A, int i, int j); int main() { int j = 10; int i = 0; int *b = new int[j]; for (int i = 0; i <= 10; i++) b[i] = i; for (int i = 0;
#include <iostream>
using namespace std;
int ReverseArray(int* A, int i, int j);
int main()
{
int j = 10;
int i = 0;
int *b = new int[j];
for (int i = 0; i <= 10; i++)
b[i] = i;
for (int i = 0; i <= 10; i++) //just to compare the old and new array
cout << b[i] << endl; //just to compare the
for(int i = 0; i <= j; i++)
cout << ReverseArray(b,i,j) << endl;
system("pause");
return 0;
}
int ReverseArray(int* A, int i, int j)
{
if (i <= j)
{
swap(A[i], A[j]);
ReverseArray(A, i + 1, j - 1);
}
return A[i];
#包括
使用名称空间std;
int ReverseArray(int*A,int i,int j);
int main()
{
int j=10;
int i=0;
int*b=新的int[j];
对于(int i=0;i你有一个双循环,一旦在这里:
for(int i = 0; i <= j; i++)
cout << ReverseArray(b,i,j) << endl;
ReverseArray(A, i + 1, j - 1);
递归调用函数相当于在其上循环。要反转列表,只需在其上循环一次,所做的工作相当于双重嵌套循环。因此,让我们摆脱
for(int i = 0; i <= j; i++)
那么你只需要反转b,没有别的。要打印,只需从0循环到10,然后打印每个元素
同样,这是不相关的,但请记住,现在的代码涉及尚未分配给堆的内存
int *b = new int[j];
在物理内存位置b,b+1,b+2,…,b+9处创建j(这里是10)int。b[i]然后获取在b+i处保留的内存,也就是说,它获取*(b+i)。您的几个循环尝试使用b[10]执行操作,但没有为其分配足够的内存。这将导致未定义的行为(也就是说,根据编译器和计算机的状态,可能会发生许多不同的事情)。在我的计算机上删除“system”(“pause”);(不应影响代码执行)后,这给了我一个内存分配
这里的解决方案是要么
int *b = new int[j+1];
或者替换所有供参考的内容,您可以只使用数组基数和长度,使用指针算法并在递归调用中降低长度。或者,使用将是最简单的方法,但我怀疑这对您的赋值是否是合法的解决方案。
int *b = new int[j];
int *b = new int[j+1];