再帰を使った配列内の最大要素

CCBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、再帰を使って配列内の最大要素を見つけるプロセスを学びます。C プログラムは、ユーザーに配列のサイズを入力するように促し、次に配列の要素を入力し、その後、配列の最大要素を出力します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/CompoundTypesGroup -.-> c/arrays("Arrays") c/FunctionsGroup -.-> c/function_parameters("Function Parameters") c/FunctionsGroup -.-> c/recursion("Recursion") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/arrays -.-> lab-123275{{"再帰を使った配列内の最大要素"}} c/function_parameters -.-> lab-123275{{"再帰を使った配列内の最大要素"}} c/recursion -.-> lab-123275{{"再帰を使った配列内の最大要素"}} c/user_input -.-> lab-123275{{"再帰を使った配列内の最大要素"}} c/output -.-> lab-123275{{"再帰を使った配列内の最大要素"}} end

ファイルのセットアップ

まず、~/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;
}

まとめ

素晴らしい仕事です!再帰を使って配列内の最大要素を見つける方法に関するこの実験を無事に完了しました。これで、再帰を使って配列の最大要素を見つける方法を十分に理解しているはずです。おめでとうございます!