如何在 C 语言中以递归方式反转数组

在本教程中,我们希望以递归方式编写数组反转函数。事实证明,与迭代相比,递归方法更困难,但递归程序更正式。
首先,我们需要定义递归的情况。首先,需要编写迭代方法的程序来理解.

反转C++数组的元素”

此图分三步解释了 in-i, 重复该操作,直到达到绘画长度的一半。我们只需要在数组的前半部分重复该操作,否则我们将把后半部分的元素与已经处理的前半部分的元素交换,然后我们回退到我们的起始数组。

以下代码使用迭代方法交换数组:

#include
#include

int main()
{
int i,n,temp;

printf(数组大小”);
scanf(%d”,&n);
int t[n];

for(i=0;我 {
printf(t[%d]=”,i);
scanf(%d”,&t[i]);
}
i=0;
while(i {
温度 = t[i];
//n-1 因为数组以 0
t[i]=t[n-1-i];
t[n-1-i]=温度;
i++;
}

printf(\n反表:\n”);
for(i=0;我 {
printf(\nt[%d]=%d”,i,t[i]);
}
getch();
}
执行此代码给出:

使用递归方法在 C 语言中反转数组

现在我们有了迭代方法的程序,我们将创建一个正式版本。你要问一个问题,它与什么不同?井!递归版本是一个调用自身直到到达支点的函数。这个递归调用相当于迭代版本中的循环。

你只需要转换迭代程序就可以得到一个递归程序。支点是 while 循环中的停止条件(在程序中我们把 i>=(n+1)/2因为调用函数时,数组 n-1 的大小减小了)。i 成为函数的主要参数,因为停止测试是在 i.

以下示例说明如何递归反转 C.

#include
#include

int* 反转(int[],int,int);

main()
{
int i,n;
printf(数组的大小”);
scanf(%d”,&n);
int t[n];
int *ti;
for(i=0;我 {
printf(t[%d]=”,i);
scanf(%d”,&t[i]);
}
ti=inverse(t,n-1,0);

printf(\n反向数组为:\n”);
for(i=0;我 {
printf(\nt[%d]=%d”,i,ti[i]);
}
getch();
}

int* inverse(int t[],int n, int i)
{
int temp;
if(i>=(n+1)/2 )
返回 t;
else{
温度 = t[i];
t[i]=t[n-i];
t[n-i]=温度;
反向返回 (t,n,i+1);
}
}
编译并执行此代码将产生以下结果: