Помощь - Поиск - Пользователи - Календарь
Полная версия: рекурсия
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Bast
Разработайте рекурсивную функцию двоичного поиска элемента массива, равного данному числу.
Она у меня работает, но не так как надо, ее надо переделать. Помогите плиз.

Uses
Crt;
CONST
MAXN=10;
VAR
a:array[1..MAXN] of Longint;
z:Longint;

Function Rec(l,r:longint):boolean;
Var
b:Boolean;
tmp:Longint;
Begin
b:=false;
tmp:=(l+r) div 2;
if a[tmp]=z then
Begin
rec:=true;
Exit;

End;
If (a[tmp]>z) and (l<>tmp) then b:=b or rec(l,tmp-1);
If (a[tmp]<z) and (r<>tmp) then b:=b or rec(tmp+1,r);
Rec:=b;
End;

var
i,s:Longint;
BEGIN
ClrScr;
Writeln('Введите количество элементов массива');
Read(z);
Writeln('Введите элементы массива');
For i:=1 to z do
Read(a[i]);
Writeln('Введите число');
Read(s);
Writeln(rec(1,i));
ReadKey;
END.


klem4
смотри, что-то вроде этого:

Код
uses crt;

const
  MAX_N = 10;

type
  TArray = array [1..MAX_N] of Integer;

function BinSearch(const arr: TArray; left, right, value: Integer): Boolean;
var
  middle: Integer;
begin
  if right - left = 1 then
    BinSearch := (value = arr[left]) or (value = arr[right])
  else begin
    middle := (left + right) div 2;

    if value > arr[middle] then
      left := middle
    else
      right := middle;

    BinSearch := BinSearch(arr, left, right, value);
  end;
end;

var
  arr: TArray = (1, 2, 3, 4, 5, 60, 70, 88, 99, 101);

begin
  clrscr;
  writeln(BinSearch(arr, 1, MAX_N, 88));
  readln;
end.


ps а в следующий раз используй поиск по форуму.
Bast
Не работает так
volvo
Цитата
Не работает так
dry.gif
Что, True не пишется у тебя? Что значит "не работает"? Вот у меня - работает, что я делаю неправильно?

Добавлено через 2 мин.
P.S.
var { <--- я надеюсь здесь Var на const изменила? }
arr: TArray = (1, 2, 3, 4, 5, 60, 70, 88, 99, 101);
Bast
Все сделала smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.