Форум программистов, компьютерный форум CyberForum.ru

Рекурсивная функция для нахождения минимального элемента массива - C++

Восстановить пароль Регистрация
 
к8
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 38
14.05.2014, 19:18     Рекурсивная функция для нахождения минимального элемента массива #1
Помогите!Нужно написать рекурсивную функцию для нахождения минимального элемента массива
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 19:18     Рекурсивная функция для нахождения минимального элемента массива
Посмотрите здесь:

C++ Функция нахождения минимального элемента заданного столбца матрицы
C++ Рекурсивная функция нахождения максимального элемента в списке
C++ Функция для нахождения минимального элемента
C++ Функция для нахождения индекса максимального элемента массива
рекурсивная функция поиска минимального элемента в двумерном масиве C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
14.05.2014, 19:38     Рекурсивная функция для нахождения минимального элемента массива #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void FindMin(int* mass,int n,int i,int& min)
{
   if(i>=n)
         return;
   if(i==0)
   {
         min=mass[0];
         i=1;
   }
   if(mass[i]<min)
         min=mass[i];
   FindMin(mass,n,i+1,min);
}
к8
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 38
14.05.2014, 19:52  [ТС]     Рекурсивная функция для нахождения минимального элемента массива #3
Цитата Сообщение от zss Посмотреть сообщение
return;
а какое значение возвращает?
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
14.05.2014, 19:54     Рекурсивная функция для нахождения минимального элемента массива #4
Цитата Сообщение от к8 Посмотреть сообщение
а какое значение возвращает?
Никакое. Функция ведь void
к8
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 38
14.05.2014, 19:59  [ТС]     Рекурсивная функция для нахождения минимального элемента массива #5
Цитата Сообщение от zss Посмотреть сообщение
Никакое. Функция ведь void
у меня почему-то независимо от того какое бы ни было минимальное значние,всегда в ответе 1.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
using namespace std;
 
void FindMin(int* mass,int n,int i,int& min)
 {
    if(i>=n)
          return;
    if(i==0)
    {
          min=mass[0];
          i=1;
    }
    if(mass[i]<min)
          min=mass[i];
    FindMin(mass,n,i+1,min);
 }
 
main()
{
    int mass[100];
    int n;
    cout<<"n=";cin>>n;
    for(int i=0;i<n;i++)
    {
        cout<<"mass["<<i<<"]=";cin>>mass[i];
    }
    cout << "min = "<<FindMin<<endl;
    return 0;
}
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
14.05.2014, 20:02     Рекурсивная функция для нахождения минимального элемента массива #6
строку 24 замените на
C++
1
2
3
int min;
FindMin(mass,n,0,min);
cout << "min = "<<min<<endl;
к8
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 38
14.05.2014, 20:10  [ТС]     Рекурсивная функция для нахождения минимального элемента массива #7
спасибо большое
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
14.05.2014, 20:21     Рекурсивная функция для нахождения минимального элемента массива #8
к8,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
template<typename T>
T min(T *a, size_t n, size_t i, T m) {
    return i < n ? min(a, n, i + 1, std::min(m, a[i])) : m;
}
 
template<typename T>
T min(T *a, size_t n) {
   return min(a, n, 1, *a);
}
 
int main(int argc, char **argv) {
    int a[] = {1, 2, 3, 4, 0, 6}; 
    std::cout << min(a, 6) << std::endl;
}
Чем короче код тем понятнее.
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
14.05.2014, 21:13     Рекурсивная функция для нахождения минимального элемента массива #9
Попробуйте так(end должен быть больше или равен begin):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <algorithm>
 
int * find_min(int * begin, int * end) {
    if (begin==end) return end;
 
    if((end-begin) == 1)
        return begin;
 
    if((end-begin) == 2) {
        if(*begin<=*(begin+1))
            return begin;
        else
            return begin+1;
    }
 
    int * first = find_min(begin,begin + (end-begin)/2);
    int * second = find_min(begin + (end-begin)/2, end);
    if(*first < *second)
        return first;
    else
        return second;
}
 
int main() {
    int a[] = { 6,43,12,5,12,41,12,44,2,55 };
 
    std::cout <<         *find_min(a,a+sizeof(a)/sizeof(int)) << std::endl;
    std::cout << *std::min_element(a,a+sizeof(a)/sizeof(int)) << std::endl;
 
    return 0;
}
tegauss
14.05.2014, 21:51
  #10

Не по теме:

outoftime, Ваш вариант конечно продвинут, но для новичка совершенно непонятен, ИМХО

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2014, 23:04     Рекурсивная функция для нахождения минимального элемента массива
Еще ссылки по теме:

C++ Рекурсивная функция нахождения наибол. элемента в массиве
C++ Рекурсивная функция для вычисления индекса максимального элемента массива
Составить программу для нахождения минимального элемента массива C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
outoftime
14.05.2014, 23:04     Рекурсивная функция для нахождения минимального элемента массива
  #11

Не по теме:

tegauss, Зато есть куда расти.

Yandex
Объявления
14.05.2014, 23:04     Рекурсивная функция для нахождения минимального элемента массива
Ответ Создать тему
Опции темы

Текущее время: 06:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru