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 {
temp = t[i];
//n-1 配列が 0
で始まるため t[i]=t[n-1-i];
t[n-1-i]=temp;
i++;
}

printf("\n逆テーブル: \n");
for(i=0;私は {
printf("\nt[%d]=%d",i,t[i]);
}
getch();
}
このコードを実行すると、次のようになります:

再帰メソッドでC言語の配列を反転する

反復メソッドのプログラムができたので、正式なバージョンを作成します。あなたは質問をしようとしています、それは何と違うのですか?まぁ!再帰バージョンは、支点に到達するまで自身を呼び出す関数です。この再帰呼び出しは、反復バージョンのループに相当します。

再帰プログラムを取得するには、反復プログラムを変換するだけで済みます。支点は、while loopi (プログラムでは i>=(n+1)/2 関数が呼び出されたときに配列 n-1 のサイズがデクリメントされたためです)。i は、i.

次の例は、C.

#include
#include

int* inverse(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 )
return t;
else{
temp = t[i];
t[i]=t[n-i];
t[n-i]=temp;
逆戻り値 (t,n,i+1);
}
}
このコードをコンパイルして実行すると、次のようになります。