C 언어에서 재귀 적으로 배열을 뒤집는 방법

이 튜토리얼에서는 배열 반전 함수를 재귀적으로 코딩하려고 합니다. 재귀 적 방법은 반복 적 방법에 비해 더 어렵지만 재귀 프로그램은 더 공식적입니다.
우선 재귀의 경우를 정의해야합니다. 먼저 이해하기 위해 반복 메서드의 프로그램을 작성해야 합니다.

C++에서 배열의 요소 반전

이 그림은 in-i,  페인팅 길이의 절반에 도달할 때까지 작업이 반복됩니다. 배열의 전반부에서만 작업을 반복해야 하며, 그렇지 않으면 후반부의 요소를 이미 처리된 전반부의 요소로 교체하고 시작 배열로 돌아갑니다.

다음 코드는 배열을 반복 메서드로 바꿉니다.

#include< conio.h> 
#include< stdio.h>

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

printf("배열 크기 ");
scanf("%d",& n);
int t[n];

for(i=0; 나는< n; i++)
{
printf("t[%d]=",i);
scanf("%d",& t[i]);
}
i=0;
동안(i< n/2)
{
온도 = t[i];
//n-1 배열이 0 t[i]=t[n-1-i];
t[n-1-i]=온도;
i++;
}

printf("\n역표: \n");
for(i=0; 나는< n; i++)
{
printf("\nt[%d]=%d",i,t[i]);
}
getch();
}
이 코드를 실행하면

재귀 방법으로 C에서 배열 반전

이제 반복 방법에 대한 프로그램이 있으므로 공식 버전을 만들 것입니다. 당신은 질문을 할 것입니다, 그것은 무엇과 다른가요? 잘! 재귀 버전은 지렛대에 도달할 때까지 자신을 호출하는 함수입니다. 이 재귀 호출은 반복 버전의 루프와 동일합니다.

재귀 프로그램을 얻으려면 반복 프로그램을 변환하기만 하면 됩니다. 받침점은 while loop나는< n/2 (프로그램에 i>=(n+1)/2 함수가 호출될 때 배열 n-1의 크기가 감소했기 때문입니다). ii.

다음 예제는 C.

#include< conio.h> 
#include< stdio.h>

int* 역(int[],int,int);

main()
{
int i,n;
printf("배열의 크기");
scanf("%d",& n);
int t[n];
int *ti;
for(i=0; 나는< n; i++)
{
printf("t[%d]=",i);
scanf("%d",& t[i]);
}
ti=역(t,n-1,0);

printf("\n역방향 배열: \n");
for(i=0; 나는< n; i++)
{
printf("\nt[%d]=%d",i,ti[i]);
}
getch();
}

int* 역(int t[],int n, int i)
{
int temp;
if(i>=(n+1)/2 )
반환 t;
else{
temp = t[i];
t[i]=t[n-i];
t[n-i]=온도;
역 반환 (t,n,i+1);
}
}
이 코드를 컴파일하고 실행하면 다음과 같은 결과가 발생합니다.