gpt4 book ai didi

c++ - 递归反转数组

转载 作者:行者123 更新时间:2023-11-30 00:44:09 25 4
gpt4 key购买 nike

我正在尝试递归地反转数组的元素。我可以在函数中使用的唯一参数是数组和大小。这是我到目前为止所做的,但在交换时遇到了麻烦。我怎样才能修复我的输出?例如,当我输入 1 2 3 时,元素会反转为 2 3 1

//Recursive function for Reversing array
void reverse_arr(int a[],int size){
if(size ==0){
return ;
}
else{
int temp;
int i= 0;
temp = a[i];
a[i]= a[size-1];
a[size -1] = temp;
reverse_arr(a, size-1);
}
}

int main() {
int a[100];
int size ;

cout<<"Enter the size of the array: "<<endl;
cin>>size;
cout<<"Enter the elements of the array: "<<endl;
for(int i = 0; i<size; i++){
cin>>a[i]; }
for(int i = 0; i<size; i++){

cout<<a[i]<<" ";}
cout<<endl;
reverse_arr(a, 3);
for(int i = 0; i<size; i++){

cout<<a[i]<<" ";}
}

最佳答案

总是交换第一个和最后一个元素并不能满足您的要求。如果您的数组最初是 1 2 3 4 5 ,这是每个递归步骤的交换序列:

  • 交换 04 : 5 2 3 4 1
  • 交换 03 : 4 2 3 5 1
  • 交换 02 : 3 2 4 5 1
  • 交换 01 : 2 3 4 5 1

在递归算法中,每个递归步骤都应该在较小的数据集上解决相同的问题,并将其与我们目前所做的相结合以更接近所需的结果。但是,只有当它们与原始顺序相同时,交换第一个和最后一个才是正确的,但在每个步骤之后都不是这样。

交换数组的第一个和最后一个元素后,您需要递归到数组的中间,而不仅仅是与size - 1 相同的数组.所以你需要在从第二个元素开始的数组上递归调用函数,并从 size 中减去 2。 .

什么都不做的基本情况应该是 size <= 1 ,因为 1 元素数组在反转时是相同的。

//Recursive function for Reversing array
void reverse_arr(int a[],int size){
if(size <= 1 ){
return ;
}
else{
int temp;
int i= 0;
temp = a[i];
a[i]= a[size-1];
a[size -1] = temp;
reverse_arr(&a[1], size-2);
}
}

关于c++ - 递归反转数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49930296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com