Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2013, 18:46   #1
lialia
Форумчанин
 
Регистрация: 08.12.2012
Сообщений: 116
По умолчанию Рекурсия

Здраствуйте,скажите пожалуйста,а как можно расчитать максимальный размер массива в рекурсии(чтобы не было переполнения стека)
lialia вне форума Ответить с цитированием
Старый 23.04.2013, 19:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С потолка:
Код:
function max(a:array of чего-то,n:integer):integer;
var r:integer;
begin
 if n=Length(a) then begin 
  r:=a[n]; 
 end else begin
  r:=max(a,n+1);
  if a[n]>r then r:=a[n];
 end;
 max:=r;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.04.2013, 20:13   #3
lialia
Форумчанин
 
Регистрация: 08.12.2012
Сообщений: 116
По умолчанию

спасибо
lialia вне форума Ответить с цитированием
Старый 23.04.2013, 20:17   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если речь идет о максимальном элементе массива, то чтобы стек сильно не забивать можно, например, пополам делить
Код:
const a: array [1..11] of Integer = (3,-1,5,7,2,54,0,2,55,1,7);

function Max(IndexFrom,IndexTo: Integer): Integer;
var i,i1,i2,r: Integer;
begin
  if IndexFrom=IndexTo then r:=a[IndexFrom]
  else begin
    i:=(IndexTo-IndexFrom) div 2;
    i1:=Max(IndexFrom,IndexFrom+i);
    i2:=Max(IndexFrom+i+1,IndexTo);
    if i2>i1 then r:=i2 else r:=i1;
  end;
  Max:=r;
end;

s:=IntToStr(Max(1,11));
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Рекурсия Dmitry_Web Помощь студентам 5 04.02.2012 00:55
Рекурсия (С) rublyabachka Помощь студентам 1 15.12.2011 02:11
Рекурсия mishanya6 Помощь студентам 1 08.12.2011 12:17
Рекурсия Alexsey1991 Помощь студентам 1 12.05.2010 10:24