В кодах используется несколько глобальных переменных, которые затрудняют понимание, и вы не показываете, как переменные инициализируются до вызова процедуры. Также было бы полезно, если бы пример кода был на английском языке.
В любом случае,
- Код не защищает от возможности
rezultatas > b
.
- Из-за сложного условия на
if
, ats[liko_skaitmenu] := i;
может выполняться со значениями liko_skaitmenu < 1
.
- Код не защищает от повторения того же номера / индексной позиции.
Вы, вероятно, хотите что-то вроде:
if not baigti and (resultatas <= b) then (* if not told to stop, or off-range *)
begin
if liko_skaitemu = 0 then
begin
(* finished searching: either success or failure *)
if resultatas = b then
(*success! save the values *)
baigti := true;
end;
end
else
begin
(* continue searching *)
end
end;
Тем не менее, подход - это O (N ^ c). Вы можете сделать это лучше, отсортировав массив и ограничив рекурсивный шаг частями массива, которые могут содержать ответ, или можете работать с комбинациями чисел c в массиве. На этом форуме есть много похожих вопросов с хорошими ответами.