使用递归反转数组的分段错误



我得到了此代码的分段错误我不知道怎么了。如果已经给出了输入,但当我们尝试从用户那里获取输入时失败,那么它运行良好。

`

#include <bits/stdc++.h>
using namespace std;
void reverseArray(int arr[], int s,int e){
if (s<e){
swap(arr[s],arr[e]);
reverseArray(arr,s++,e--);
}
}
int main() {
//code
int t;
cin>>t;
while (t--)
{
int n;
cin>>n;
int arr[n];
for(int i=0;i<n;i++)
cin>>arr[i];
reverseArray(arr,0,n-1);
for(int i=0;i<n;i++)
cout<<arr[i]<<" ";

cout<<endl;
}
}    `

你指的是

reverseArray(arr,s+1,e-1);

这也会起作用(尽管它通过修改se变量来完成不必要的工作(。

reverseArray(arr,++s,--e);

s++e--的问题在于,它们返回的值是se的值,因此将未更改的值传递给递归调用,最终导致堆栈溢出。

本质上,您的误解是关于操作的返回值副作用之间的差异。++--的副作用是修改变量。但这无关紧要,传递给递归调用的是表达式的返回值。

相关内容

  • 没有找到相关文章

最新更新