Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: cheops   (27.12.2011 в 15:42)
Во-первых вы вызываете её непонятно как. В качестве левой границы указываете 5, в качестве правой границы k-1 (и наоборот нужно и значения неправильные). У вас массив содержит 5 элементов, т.е. больше 4 индекс не может принимать, k вообще в main() не инициализирована, как минимум, вызов должен выглядеть так
cout<<min(mas, 0, 4);
0 - это индекс первого элемента массива mas
4 - это индекс последнего элемента массива mas

Во-вторых, программа у вас уходит в бесконечную рекурсию, так как вы делите массив пополам, если количество элементов нечетное - все нормально, там посередине стоит элемент, если количество элементов подмассива четное, начинаются биения и точка возврата из рекурсии не срабатывает. Нужно проверять, есть у вас посередине интервала точка или нет и в зависимости от этого принимать решение какую точку брать.

Вот ваша задача для минимального элемента
#include<iostream>
using namespace std;

// Есть ли середина?
int is_center(int left, int right)
{
  return !((left + right) % 2);
}
// Рекурсивный поиск минимума
int min(const int a[], int left, int  right)
{
  int x, y, m, center;
  // Точка возврата из рекурсии
  if (left == right) return a[left];
  // Вычисляем середину
  m = (left + right) / 2;

  // Минимум слева от середины
  if(is_center(left, m))
    x = min(a, left, m);
  else
    x = min(a, left, m - 1);
  // Минимум справа от середины
  if(is_center(m, right))
    y = min(a, m, right);
  else
    y = min(a, m + 1, right);
  // Выбираем минимальный из результатов
  if (x < y) return x;
  else return y;
}
void main()
{
//  int mas[5]={1,2,3,4,5};
  int mas[5]={5,4,1,2,6};
  cout << min(mas, 0, 4) << endl;
  system("pause");
}
Тут конечно, вообще 4 вызова получилось, но это рабочий вариант и его можно быстро переработать для максимального значения (если это вызовет трудности - пишите).


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: