递归反转数组
Recursively reverse an array
我正在尝试递归反转数组的元素。我在函数中唯一可以拥有的参数是数组和大小。这就是我到目前为止所做的,但在交换时遇到麻烦。如何修复我的输出? 例如,当我输入 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
的,下面是每个递归步骤的交换顺序:
- 交换
0
和4
:5 2 3 4 1
- 交换
0
和3
:4 2 3 5 1
- 交换
0
和2
:3 2 4 5 1
- 交换
0
和1
: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);
}
}
void Reverse(int a[], int size)
{
if (size > 1)
{
// Swap the extreme elements
int swap= a[0]; a[0]= a[size-1]; a[size-1]= swap;
// Recurse on the subarray obtained by dropping the extreme elements
Reverse(a+1, size-2);
}
}
我将传递start
和end
索引并使用:
void reverseArray(int arr[], int start, int end)
{
if (start >= end)
return;
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
// Recursive Function calling
reverseArray(arr, start + 1, end - 1);
}
逻辑很简单,将 arr[start] 与 arr[end] 交换,然后递归调用 reverse 来处理数组的其余部分。
如果您想仅通过传递大小来执行此操作:
void reverseArray(int a[],int size)
{
if (size > 1)
{
//swapping
int temp = a[0];
a[0]= a[size-1];
a[size-1]= temp;
reverseArray(a+1, size-2);
}
}
相关文章:
- 使用递归的数组的最小值.这是怎么回事
- 数组元素打印的递归方法
- 使用递归模板动态分配的多维数组
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 使用递归输出数组
- 使用递归反转和打印出数组的内容
- 递归二进制搜索与字符串数组
- 将数组传递给递归函数,同时C++修改它
- 使用递归的序列到达数组末尾的最小跳转次数
- 这是定义一组递归规则的正确方法吗?
- 斐波那契数的递归函数
- 尝试递归获取数组元素的总和
- 在C++中对二维数组进行归零.循环需要2个吗
- C++排序数组递归
- 当我的编译器不符合标准时,如何将数组成员归零
- 数独递归,接受零为合法
- 通过除数组递归地计算和
- 动态数组递归与不同的编译器
- 不使用循环和数和的数字根递归