Показать сообщение отдельно
  #2  
Старый 28.05.2013, 06:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от apofeozsun
Не понимаю каскадную рекурсию, написал линейную. Помогите переделать в каскадную.

Задание: Для заданного одномерного массива B из N элементов найти значение минимального элемента массива. Рекурсивную функцию применять каждый раз отдельно для каждой из половин массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.

Подозреваю, что имеется в виду, что у тебя 2 рекурсивных вызова для каждой итерации.

что-то типа:
Код:
function FindMin(const B : Array Of Integer) : Integer;
var
  B1, B2 : Array Of Integer;
  I : Integer;
begin
  If Length(B) = 1 
    Then Result := B[Low(B)] 
    Else
      Begin
        SetLength(B1,Length(B) div 2);
        SetLength(B2,Length(B) - Length(B) div 2);
        For I := Low(B) To High(B) Do
          If I <=Length(B1) Then B1[i] := B[i] Else B2[I-Length(B1)] := B[i];
        Result := Min(FindMin(B1),FindMin(B2));
        SetLength(B1,0);
        SetLength(B2,0);
      End;
end;
Ответить с цитированием