рекурсия вычисление наименьшего значения в массиве

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
ujif
Сообщения: 4
Зарегистрирован: 13 июн 2013, 20:27

13 июн 2013, 20:51

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21




const n=10;
type myarray=array[1..n]of integer;
const a:myarray=(4,3,5,-1,2,9,4,8,5,3);
function min(x,y:integer):integer;
begin
if x>y then min:=y
else
min:=x;
end;
function pmin(n,b:integer):integer;
begin
if n=2 then
pmin:=min(n,a[1])
else
pmin:min(a[n],pmin(n-1,a[n]));
end;
begin
writeln('min element massiva=',pmin(n,a[n]));
end.
помогите разобраться как передаются данные
от функции в функцию на рекурсивном подъеме
то есть когда программа начинает вычислять
наименьший элемент
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

15 июн 2013, 22:09

На дельфи пишите?
Предлагаю сделать следующим образом:
бросаем кнопку на форму и пишем в ее обработчик следующее:

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
const n=10;
type myarray=array[1..n]of integer;
const a:myarray=(4,3,5,-1,2,9,4,-8,5,3);

function min(x,y:integer):integer;
begin
if x>y then min:=y
else
min:=x;
end;

function pmin(n,b:integer):integer;
begin
if n=2 then
pmin:=min(n,a[1])
else
pmin:=min(a[n],pmin(n-1,a[n]));
end;

begin
ShowMessage(IntToStr(pmin(n,a[n])));
end;
Открываем окно дебаггера:
View \ Debug Windows\ Watches
добавляем в него все переменные что используются в данном коде (x,y,min,pmin,n,a[n], b), ставим breakpoint на ShowMessage и вперед! все по шагам замечательно видно
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
ujif
Сообщения: 4
Зарегистрирован: 13 июн 2013, 20:27

15 июн 2013, 23:58

для меня delphi темный лес , знаю
что это мне нужно однако не пойму
как и подступиться
может посоветуете с чего начать
изучение delphi может литература или youtube или...
там в коде у меня кстати ,ошибка
prim:=min(n,a[1]);
правильнее написать
prim:=min(a[n],a[1]);
иначе при массиве из 3 элементов
наибольший не вычисляется
а код я скатал где-то пробовал сам разобрать
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

16 июн 2013, 23:08

Мда... Искать минимум рекурсией... И чему сейчас учат?
Dr_Grizzly, вопрос на устный счет - при каком N вылезет Stack Overflow при дефолтных параметрах стека?
It's a long way to the top if you wanna rock'n'roll
Ответить