C言語で配列を再帰的に反転させる方法
このチュートリアルでは、配列反転関数を再帰的にコーディングします。再帰的手法は反復的手法に比べて難しいが、再帰的プログラムはより形式的であることがわかった
まず、再帰の場合を定義する必要がある。まず、理解する反復メソッドのプログラムを書く必要があります.
この図は、i と n-i, この操作は、絵画の長さの半分に達するまで繰り返されます。配列の前半でのみ操作を繰り返す必要があり、そうでない場合は、後半の要素とすでに処理された前半の要素を入れ替え、そこで開始配列にフォールバックします.
次のコードは、反復メソッドで配列を入れ替えます。
まず、再帰の場合を定義する必要がある。まず、理解する反復メソッドのプログラムを書く必要があります.
この図は、i と n-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.
再帰プログラムを取得するには、反復プログラムを変換するだけで済みます。支点は、while loopi
次の例は、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);
}
}