使用递归查找数组中的最大元素

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 []);  // 接受一个整数数组作为参数
int size;

int main()
{
    printf("\n\n\t\tLabEx - Best place to learn\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\tCoding is Fun !\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;
}

理解代码

这个 C 程序由两个函数组成: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 size;

int main()
{
    printf("\n\n\t\tLabEx - Best place to learn\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\tCoding is Fun !\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;
}

总结

干得漂亮!你已经成功完成了这个关于如何使用递归查找数组中最大元素的实验。现在你应该对如何使用递归查找数组中的最大元素有了很好的理解。做得好!

您可能感兴趣的其他 C 教程