Описать рекурсивную функцию MaxInt(A, N) целого типа, которая находит максимальный элем

Описать рекурсивную функцию MaxInt(A, N) целого типа, которая находит максимальный элемент целочисленного массива A размера N (1 ≤ N ≤ 10), не используя оператор цикла. С помощью этой функции найти максимальные элементы массивов A, B, C размера NA, NB, NC соответственно. Все исправил в функции. Вопрос следующий. Мне нужно функцию использоавть для нескольких массив. Но так как max статик, то выдает во всех массивах максимальный элемент один и тот же. Как исправить?

   #include <iostream>
#include <ctime>
using namespace std;
int MaxInt(int A[], int N);//Обьявление функции.
int main()
{
    srand(time(0));
    setlocale(LC_ALL, "RU");
    int size;
    cout << "Введите количество элеметнов массива от 1 до 10 :  " ;
    cin >> size;
    if (size < 1 || size>10)
    {
        return 0;
    }
    int Array_A[10];
    int Array_B[10];
    int Array_C[10];
    for (int i = 0; i < size; i++)
    {
        Array_A[i] = rand() % 100;
    }
    cout << "Массив 1" << endl;
    for (int i = 0; i < size; i++)
    {
        cout << Array_A[i] << "\t";
    }
    cout << endl;
    for (int i = 0; i < size; i++)
    {
        Array_B[i] = rand() % 100;
    }
    cout << "Массив 2" << endl;
    for (int i = 0; i < size; i++)
    {
        cout << Array_B[i] << "\t";
    }
    cout << endl;
    for (int i = 0; i < size; i++)
    {
        Array_C[i] = rand() % 100;
    }
    cout << "Массив 3" << endl;
    for (int i = 0; i < size; i++)
    {
        cout << Array_C[i] << "\t";
    }
    MaxInt(Array_A, size);
    MaxInt(Array_B, size);
    MaxInt(Array_C, size);
    cout << endl;
    cout << "\nMax 1 = " << MaxInt(Array_A, size) << endl;
    cout << "\nMax 2= " << MaxInt(Array_B, size) << endl;
    cout << "\nMax 3= " << MaxInt(Array_C, size) << endl;
    system("pause");
    return 0;
}
int MaxInt(int A[], int N)
{
    static int max = 0;
    if (N > 0)
    {
        if (A[N - 1] > max)
        {
            max = A[N - 1];
        }
        return MaxInt(A, N - 1);
    }
    return max;
}

Ответы (1 шт):

Автор решения: Vladimir
  1. Вы возвращаете из функции максимум.. куда? в смысле, присвойте его чему-то или хотя бы сразу же выведите, типа cout << "\nMax = " << MaxInt(Array_A, size) << endl;

  2. При каждом рекурсивном запуске функции Ваш max равен 0. Если хотите, чтобы максимальное значение сохранялось между вызовами, то нужно объявить эту переменную как статическую:

     int MaxInt(int A[], int N)
     {
         static int max = 0;
         if (N > 0)
         {
             if (A[N - 1] > max) { 
                 max = A[N - 1]; 
             }
             return MaxInt(A, N - 1);
         }
         return max;
     }
    

UPD: в связи с уточнением задачи и ограничением на прототип рекурсивной функции привожу второй вариант с использованием грубой силы в лице глобальной переменной:

вне всех функций объявляется глобальная int max, после чего рекурсивная функция будет:

    int MaxInt(int A[], int N)
    {
        if (N > 0)
        {
            if (A[N - 1] > max) { 
                max = A[N - 1]; 
            }
            return MaxInt(A, N - 1);
        }
        return max;
    }

И после каждого вызова функции перед вызовом для нового массива необходимо "сбрасывать" эту глобальную переменную max=0;.

UPD2: как верно подметил @avp, значениями массива могут быть и только отрицательные числа. И в таком случае, за начальное значение max лучше принимать какой-то элемент каждого массива, например, первый: max = Array_A[0].

→ Ссылка