Форум С++

 

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

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

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

Автор: cheops   (27.12.2011 в 16:01)
Успели уже ответить, ошибка была в предыдущей программе, вот более правильный (да и более экономный) вариант
#include<iostream>
using namespace std;

int min(const int a[], int left, int  right)
{
  int x, y, m, center;
  // Точка возврата из рекурсии
  if (left == right) return a[left];
  // Обходим проблему "биений" рекурсии
  if((left - right) == 1 || (right - left) == 1)
  {
    return a[left] < a[right] ? a[left] : a[right];
  }
  // Вычисляем середину
  m = (left + right) / 2;

  // Минимумы слева и справа от середины
  x = min(a, left, m);
  y = min(a, m, right);

  // Выбираем минимальный из результатов
  if (x < y) return x;
  else return y;
}
void main()
{
//  int mas[5]={1,2,3,4,5};
  int mas[8]={1,6,4,4,3,2,3,6};
  cout << min(mas, 0, 7) << endl;
  system("pause");
}


Ваше имя:

Пароль:

Цитировать

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

Сообщение:

Прикрепить: