我得到了此代码的分段错误我不知道怎么了。如果已经给出了输入,但当我们尝试从用户那里获取输入时失败,那么它运行良好。
`
#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);
这也会起作用(尽管它通过修改s
和e
变量来完成不必要的工作(。
reverseArray(arr,++s,--e);
s++
和e--
的问题在于,它们返回的值是s
和e
的值,因此将未更改的值传递给递归调用,最终导致堆栈溢出。
本质上,您的误解是关于操作的返回值和副作用之间的差异。++
和--
的副作用是修改变量。但这无关紧要,传递给递归调用的是表达式的返回值。