Описать рекурсивную функцию 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 шт):
Вы возвращаете из функции максимум.. куда? в смысле, присвойте его чему-то или хотя бы сразу же выведите, типа
cout << "\nMax = " << MaxInt(Array_A, size) << endl;При каждом рекурсивном запуске функции Ваш
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].