はじめに
この実験では、再帰を使って配列内の最大要素を見つけるプロセスを学びます。C プログラムは、ユーザーに配列のサイズを入力するように促し、次に配列の要素を入力し、その後、配列の最大要素を出力します。
ファイルのセットアップ
まず、~/project/ ディレクトリに main.c という名前の新しいファイルを作成します。次に、以下のコードをコピーしてファイルに貼り付けます。このコードには、この実験を完了するために必要なすべてのコードが含まれています。
#include<stdio.h>
#define MAX 100
int getMaxElement(int []); // takes array of int as parameter
int size;
int main()
{
printf("\n\n\t\tLabEx - Best place to learn\n\n\n");
int arr[MAX], max, i;
printf("\n\nEnter the size of the array: ");
scanf("%d", &size);
printf("\n\nEnter %d elements\n\n", size);
for(i = 0; i < size; i++)
{
scanf("%d", &arr[i]);
}
max = getMaxElement(arr); // passing the complete array as parameter
printf("\n\nLargest element of the array is %d\n\n", max);
printf("\n\n\t\t\tCoding is Fun!\n\n\n");
return 0;
}
int getMaxElement(int a[])
{
static int i = 0, max =- 9999; // static int max=a[0] is invalid
if(i < size) // till the last element
{
if(max < a[i])
max = a[i];
i++; // to check the next element in the next iteration
getMaxElement(a); // recursive call
}
return max;
}
コードの理解
この C プログラムは、2 つの関数から構成されています。main() と getMaxElement() です。
2.1 関数 main()
- 配列の要素を格納するための
arrという名前の配列を宣言し、変数を初期化します。配列の最大要素を格納するためのmaxと、関数の反復処理を維持するためのiです。 - ユーザーに配列のサイズを入力するように求めます。
- ユーザーに配列の要素を入力するように求めます。
getMaxElement()関数を呼び出し、arrという名前の配列をパラメータとして渡します。- 変数
maxに格納されている配列の最大要素を出力します。
2.2 関数 getMaxElement()
これは、配列の最大要素を返す再帰関数です。
- 関数の反復処理を維持するための静的な値
iを宣言し、0 で初期化し、配列の最大要素を格納するための静的な値maxを宣言し、非常に小さな値-9999で初期化します。 iの値が配列のサイズより小さいかどうかを確認します。- 配列の
i番目の要素の値がmaxの現在の値より大きい場合、maxの値を配列のi番目の要素で更新します。 iを次の要素に設定し、getMaxElement()関数を呼び出し、この関数を再帰的にします。
プログラムのテスト
コードをコンパイルして実行するには、~/project/ ディレクトリでターミナルを開き、以下の手順に従います。
- コードをコンパイルするには、
gcc main.cと入力します。 - プログラムを実行するには、
./a.outと入力します。 - プロンプトで配列のサイズを入力し、
ENTERキーを押します。 - 配列の要素を入力し、それぞれの後に
ENTERキーを押します。 - プログラムは配列の最大要素を出力します。
完全なコード
#include<stdio.h>
#define MAX 100
int getMaxElement(int []); // int 型の配列をパラメータとして受け取る
int size;
int main()
{
printf("\n\n\t\tLabEx - 学ぶのに最適な場所\n\n\n");
int arr[MAX], max, i;
printf("\n\n配列のサイズを入力してください:");
scanf("%d", &size);
printf("\n\n%d個の要素を入力してください\n\n", size);
for(i = 0; i < size; i++)
{
scanf("%d", &arr[i]);
}
max = getMaxElement(arr); // 完全な配列をパラメータとして渡す
printf("\n\n配列の最大要素は %d です\n\n", max);
printf("\n\n\t\t\tコーディングは楽しい!\n\n\n");
return 0;
}
int getMaxElement(int a[])
{
static int i = 0, max =- 9999; // static int max=a[0] は無効
if(i < size) // 最後の要素まで
{
if(max < a[i])
max = a[i];
i++; // 次の反復で次の要素をチェックするため
getMaxElement(a); // 再帰呼び出し
}
return max;
}
まとめ
素晴らしい仕事です!再帰を使って配列内の最大要素を見つける方法に関するこの実験を無事に完了しました。これで、再帰を使って配列の最大要素を見つける方法を十分に理解しているはずです。おめでとうございます!



