C/C++
Помогите с задачкой на С++
Нужно написать РЕКУРСИВНУЮ функцию для нахождения максимального элемента массива
Функция должна принимать на вход 4 параметра:
- индекс текущего известного максимального элемента (для первого вызова пусть будет 0),
- индекс текущего проверяемого элемента (для первого вызова пусть будет 1 и будет меняться с каждым ее вызовом на +1),
- сам массив
- длина массива.
Функция внутри себя сравнивает элемент по текущему известному индексу максимального элемента с элементом по индексу текущего проверяемого элемента и возвращает индекс наибольшего элемента.
Функция должна вызывать сама себя и возвращать значение самой себя, пока индекс текущего проверяемого элемента меньше длины массива.
Но это неточно, я не проверял свою логику...)
- индекс текущего известного максимального элемента (для первого вызова пусть будет 0),
- индекс текущего проверяемого элемента (для первого вызова пусть будет 1 и будет меняться с каждым ее вызовом на +1),
- сам массив
- длина массива.
Функция внутри себя сравнивает элемент по текущему известному индексу максимального элемента с элементом по индексу текущего проверяемого элемента и возвращает индекс наибольшего элемента.
Функция должна вызывать сама себя и возвращать значение самой себя, пока индекс текущего проверяемого элемента меньше длины массива.
Но это неточно, я не проверял свою логику...)
Санат Абралиев
круто, а теперь кодом
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <limits>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
using namespace std;
int max(int* box, int n) {
static auto x = numeric_limits<int>::min();
if (n <= 0) {
auto n = x;
x = numeric_limits<int>::min();
return n;
}
if (x < box[n - 1]) x = box[n - 1];
return max(box, n - 1);
}
int main() {
srand(unsigned(time(nullptr)));
auto w = 3U;
int box[12];
for (auto& x : box) {
x = RAND(1, 100);
cout << setw(w) << x;
}
puts("");
auto x = max(box, size(box));
cout << " max: " << x << '\n';
system("pause > nul");
}
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <limits>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
using namespace std;
int max(int* box, int n) {
static auto x = numeric_limits<int>::min();
if (n <= 0) {
auto n = x;
x = numeric_limits<int>::min();
return n;
}
if (x < box[n - 1]) x = box[n - 1];
return max(box, n - 1);
}
int main() {
srand(unsigned(time(nullptr)));
auto w = 3U;
int box[12];
for (auto& x : box) {
x = RAND(1, 100);
cout << setw(w) << x;
}
puts("");
auto x = max(box, size(box));
cout << " max: " << x << '\n';
system("pause > nul");
}
Санат Абралиев
а чем отличается код который написан ниже от вашего?
Мужичок Чок
У меня массив и функция, а в коде ниже std::vector и шаблонная функция
Антон Костин
Псих говорит что у Веселухи маловато библиотек (как минимум нужно в два раза больше) а функция использует не рекомендуемый параметр static.
#include< iostream >
#include< ctime >
using namespace std;
int finf (int *array, int size, int iter)
{
int max;
max = array[iter];
if (iter == size - 1) return array[iter];
if (max > finf(array, size, iter + 1)) return max; else return finf(array, size, iter + 1);
}
int main()
{
setlocale(LC_ALL, "ru");
srand(time(NULL));
auto size = 10;
int* array = new int[size];
for (int i = 0; i < size; i++) array[i] = rand() % 101 - 50;
for (int i = 0; i < size; i++) cout << array[i] << " "; cout << endl;
cout << finf(array, size, 0);
}
#include< ctime >
using namespace std;
int finf (int *array, int size, int iter)
{
int max;
max = array[iter];
if (iter == size - 1) return array[iter];
if (max > finf(array, size, iter + 1)) return max; else return finf(array, size, iter + 1);
}
int main()
{
setlocale(LC_ALL, "ru");
srand(time(NULL));
auto size = 10;
int* array = new int[size];
for (int i = 0; i < size; i++) array[i] = rand() % 101 - 50;
for (int i = 0; i < size; i++) cout << array[i] << " "; cout << endl;
cout << finf(array, size, 0);
}
#include <iostream>
#include <vector>
template <typename IT, typename Compare = std::less<typenamestd::iterator_traits<IT>::value_type>>
typename std::iterator_traits<IT>::value_type findMax(IT head, const IT end, Compare comp =Compare())
{
return std::next(head) == end ? *head : std::max(*head, findMax(std::next(head), end), comp);
}
int main()
{
std::vector<int> v {1,2,3,4,5,6,5,4,3};
std::cout << findMax(v.begin(), v.end()); //максимум
std::cout << findMax(v.begin(), v.end(), std::greater<int>()); // минимум
}
#include <vector>
template <typename IT, typename Compare = std::less<typenamestd::iterator_traits<IT>::value_type>>
typename std::iterator_traits<IT>::value_type findMax(IT head, const IT end, Compare comp =Compare())
{
return std::next(head) == end ? *head : std::max(*head, findMax(std::next(head), end), comp);
}
int main()
{
std::vector<int> v {1,2,3,4,5,6,5,4,3};
std::cout << findMax(v.begin(), v.end()); //максимум
std::cout << findMax(v.begin(), v.end(), std::greater<int>()); // минимум
}
Санат Абралиев
а чем отличается код который написан выше от вашего?
Ага
Похожие вопросы
- Помогите с задачкой на Си
- Помогите решить задачку пжпж условие на фото. Код необязателен, главное идею подскажите пжпж
- Помогите решить задачку по программированию
- Помогите решить задачки C++
- Помогите решить задачку c++.
- Помогите с задачкой по C++
- Помогите решить задачку по теме работа с файлами C++
- Помогите с задачкой по C++ пожалуйста
- Помогите решить задачку по программированию, пожалуйста. (с++)
- Помогите решить задачку